2017-02-18 24 views
0

им с помощью следующего контроллера в angularjs

app.controller('download-posts-controller', function($scope, $http) { 
 
    $http.get('http://localhost:8090/posts', { 
 
     headers: { 
 
      'Authorization': 'Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJQYXNjYWwiLCJ1c2VySWQiOiIxMjMiLCJyb2xlIjoiYWRtaW4ifQ.4D9TUDQAgIWAooyiMN1lV8Y5wVCrIF4rAeGzFzelSE9diqHMik9WE9x4EsNnEcxQXYATjxAZovpp-m72LpFADA' 
 
     } 
 
     }).success(function(response){ 
 
     window.alert(response) 
 
    }); 
 
});

Он должен просто позвонить своему API с запросом GET, посылая разрешение token в заголовке для проверки запроса на сервере.

Я получаю 401 несанкционированный доступ. Мой слой API имеет CORS, поэтому это не должно быть проблемой.

В обозревателе браузера я вижу, что по какой-то причине он делает запрос OPTIONS, а также не отправляет токен auth в заголовок.

Любые идеи, что я делаю неправильно ?. Я очень новой для angularjs

+0

Вы возвращаете код состояния «401» в любой точке контроллера API. –

+0

Убедитесь, что ваш токен действителен. – Janne

+0

Да, я получаю 401 на сервере, этот же токен определенно действителен, так как его срок действия не истекает токен, который я использую для разработки, и я могу использовать его для одного и того же запроса в почтовом ящике или из моего приложения для Android (или эквивалент качели apache моего веб-сайта, поскольку я только что перенесен в угловой), и он дает мне ответ, который я ожидаю. – gezinspace

ответ

0

Хорошо, я в конце концов обнаружил, что запрос перекрестного происхождения (CORS) сначала отправляет запрос OPTIONS, чтобы разрешить запрос пользователя. Теперь ... У меня есть логика в моем back-end api, которая фильтрует весь входящий HTTP и проверяет наличие заголовка авторизации, включая токен (во всех случаях, кроме случаев, когда uri содержит «/ auth/**»). Когда выполняется первоначальный запрос OPTIONS, токен в заголовке auth, который я предоставил, не включается, поскольку браузер сначала ожидает, пока OPTIONS вернутся, чтобы сказать, что я могу сделать этот запрос ...... поэтому исключение вызывается на сервере, потому что запрос OPTIONS не проверяется с помощью токена.

Исправление ... Я просто поставил чек на метод HTTP «OPTIONS» и проигнорировал auth в этом случае. Просто. Спасибо, что помогли кому-нибудь помочь в решении этого вопроса.В конце концов, это просто потребовало много отладки.

Надеюсь, это поможет помочь хотя бы одному человеку, который получает аналогичную проблему.

-1

Обязательно установите режим мандатную:

app.controller('download-posts-controller', function($scope, $http) { 
    $http.get('http://localhost:8090/posts', { 
     headers: { 
      //USE credentials mode 
      withCredentials: true, 
      'Authorization': 'Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJQYXNjYWwiLCJ1c2VySWQiOiIxMjMiLCJyb2xlIjoiYWRtaW4ifQ.4D9TUDQAgIWAooyiMN1lV8Y5wVCrIF4rAeGzFzelSE9diqHMik9WE9x4EsNnEcxQXYATjxAZovpp-m72LpFADA' 
     } 
     //SUCCESS is deprecated, removed from v1.6 
     //}).success(function(response){ 
     }).then(function(response) { 
     window.alert(response) 
    }); 
}); 

Для получения дополнительной информации см AngularJS $http Service API Reference - Usage.


это выглядело многообещающим, но он по-прежнему возвращается 401 и заголовок не присутствовал в запросе в соответствии с моим браузером. он всегда говорит, что метод запроса тоже OPTIONS

Запрос OPTIONS из браузера является pre-flight request.

В CORS, предполетный запрос с помощью метода OPTIONS передается, так что сервер может ответить ли это приемлемо для отправки запроса. Заголовок Access-Control-Request-Method уведомляет сервер как часть предпродажного запроса о том, что при отправке фактического запроса он будет отправлен с указанным методом запроса. Заголовок Access-Control-Request-Headers уведомляет сервер о том, что при отправке фактического запроса он будет отправлен с указанными заголовками. Затем сервер имеет возможность определить, желает ли он принять запрос в этих обстоятельствах.

Сервер отвечает Access-Control-Allow-Methods, который определяет жизнеспособные методы запроса соответствующего ресурса.

Same Origin Policy не позволяет злоумышленникам использовать местоположение пользователя и полномочия для совершения зла. Серверы pre-flight requests позволяют серверам предоставлять разрешение браузерам для ослабления этой политики, когда эти запросы будут безвредными.

+0

это выглядело многообещающим, но оно все равно вернулось 401, а заголовок отсутствовал в запросе в соответствии с моим браузером. он всегда говорит, что метод запроса также был ОПЦИИ (даже если я изменяю URL-адрес, скажем, stackoverflow. com, хотя вместо этого я получаю здесь 301). любые идеи почему? – gezinspace

+0

ive просто отлаживает сервер, чтобы подтвердить, что заголовок никогда не включается в запрос, отправленный с угловой страницы, но я делаю тот же запрос любым другим методом и заголовок включен – gezinspace

+0

См. Обновление ответа. – georgeawg