Я получаю проблемы при использовании angularjs $ http в запросе CORS, моя функция успеха authenticateSuccess (данные, статус, заголовки) получает неправильные заголовки. Как мы знаем, каждый запрос CORS будет дважды в angularjs, я получаю два ответа от сервера, первый раз - информация о проверке cors, вторая - ответ, но моя функция успеха получает заголовки в первом ответе. Но это данные от второго ответа.
function login(credentials) {
var data = {
username: credentials.username,
password: credentials.password,
rememberMe: credentials.rememberMe
};
console.log(data);
return $http.post('//localhost:8080/api/authenticate', data).success(authenticateSuccess);
function authenticateSuccess(data, status, headers) {
console.log(headers());
console.log(data);
var bearerToken = headers('Authorization');
if (angular.isDefined(bearerToken) && bearerToken.slice(0, 7) === 'Bearer ') {
var jwt = bearerToken.slice(7, bearerToken.length);
service.storeAuthenticationToken(jwt, credentials.rememberMe);
return jwt;
}
}
}
Вы получаете эту проблему, поскольку заголовок, который вы отправляете, не сопоставляется с заголовками в бэкэнд
Поэтому давайте предположим, что In frontend вы отправляете заголовки
contentHeaders = new Headers(); contentHeaders.append('Авторизация', 'Ваш токен'); contentHeaders.append('Content-Type', 'application/json'); contentHeaders.append('Access-Control-Allow-Origin', '*');
Таким образом, такие заголовки, как "Авторизация", "Тип контента", "Контроль доступа-Разрешить-Происхождение", должны совпадать с вашим заголовком в бэкэнд.
Таким образом, в бэкэнд "Access-Control-Allow-Headers" должны быть указаны все выше заголовки ниже
res.header("Access-Control-Allow-Origin", "*"); res.header("Access-Control-Allow-Headers", "Authorization, content-type, Access-Control-Allow-Origin");
Итак, здесь, в Access-Control-Allow-Headers, вы должны передать все заголовки, которые вы отправляете из интерфейса: "Авторизация", "Тип контента", "Контроль доступа-Разрешить-Происхождение".
Он будет работать отлично, когда вы используете концепцию выше.
благодаря
$http
.success
устарел. Используйте.then
вместо этого. docs.angularjs.org/api/ng/service/$http#deprecation-notice