CORS проблемы с использованием angularjs $ http

0

Я получаю проблемы при использовании 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;
            }
        }
    }
  • 0
    Обработчик $http .success устарел. Используйте .then вместо этого. docs.angularjs.org/api/ng/service/$http#deprecation-notice
  • 0
    да, я изменил его с помощью .then. но я получаю те же проблемы, заголовки от первого ответа времени, данные от второго ответа времени.
Теги:
cors

1 ответ

0

Вы получаете эту проблему, поскольку заголовок, который вы отправляете, не сопоставляется с заголовками в бэкэнд

Поэтому давайте предположим, что 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, вы должны передать все заголовки, которые вы отправляете из интерфейса: "Авторизация", "Тип контента", "Контроль доступа-Разрешить-Происхождение".

Он будет работать отлично, когда вы используете концепцию выше.

благодаря

Ещё вопросы

Сообщество Overcoder
Наверх
Меню