2016-07-27 3 views
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'. https://docs.angularjs.org/api/ng/service/$http#deprecation-notice – Phil

+0

yep, я изменил его, используя. then. но я получаю те же проблемы, заголовки с первого раза ответ, данные со второго ответа времени. –

ответ

0

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

Итак предположим, в веб-интерфейсе, который вы отправляете заголовки

contentHeaders = новые заголовки(); 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, вы должны передать все заголовки, которые вы отправляете из интерфейса: «Авторизация», «Тип контента», «Доступ-Контроль-Разрешить-Происхождение».

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

Спасибо

Смежные вопросы