2013-11-13 5 views
2

Я звоню в службу проверки подлинности, где я делаю $ http.post, который возвращает ответ 303, перенаправляя вызов get, возвращающий ответ.303 перенаправление не работает с угловым HTTP POST

Когда я делаю пост вызова с помощью почтальона, я получаю желаемый ответ, но когда я делаю угловой вызов $ http.post, он возвращает мне 401 ошибку (который пользователь не авторизован)

я упускаю что-то, делая угловой звонок? Бэкэнд-сервис работает нормально, поскольку он отлично работает на Postman.

Это, как выглядит $ HTTP вызов:

$http.post(url, userData).success(function(data, status) { 
    //handle success 
}.error(function(data, status) { 
    //handle error 
}); 

URL-адрес и пользовательские данные построены абсолютно нормально в данном случае.

ответ

2

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

Так коротко, что происходит: вы вызываете сервер -> сервер возвращает ответ 303 -> ваш браузер обрабатывает 303 и делает запрос к url (должно быть «местоположение» в ответе заголовок) -> сервер получает запрос и возвращает авторизованный ответ 401 -> снова браузер сначала получает ответ 401, но на этот раз браузер перенаправляет ответ на угловое -> наконец, вы можете получать данные и статус внутри error().

Решение для этого может быть переключено на другой код статуса ответа, например, 2xx, и вы можете получить location из корпуса. Затем вы можете выполнить перенаправление вручную. Если вы хотите использовать 303 или другие 3xx в качестве кода ответа, я не думаю, что на данный момент есть эффективное решение, потому что вы не можете много сделать для браузера. Насколько я знаю, может быть решение на уровне браузера, но не знаю, когда это произойдет.

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

Другие ссылки: https://groups.google.com/forum/#!topic/angular/GKkdipdMbdo Аналогичное решение вы можете увидеть по ссылке выше.

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