2013-11-22 2 views
0

У меня есть Ruby On rails Json API. У меня также есть интерфейс AngularJS, и я делаю запросы CORS.AngularJS пытается сделать CORS

Все работает нормально, когда я возвращаю 200 (например, на сообщениях, которые на самом деле вызывают метод OPTIONS и получают заголовки кормов для сервера). Но когда я вернусь 401 (несанкционированный), я получаю ошибку Cross Site. Я хочу обработать эту ошибку и показать соответствующее сообщение (когда пользователь не уполномочен выполнять метод), но кажется, что ответ 401 вызывает ошибку CORS.

Любая помощь?

+0

Не могли бы вы добавить фрагмент кода, показывающий, как вы в настоящее время делаете эти запросы, используя AngularJS? – SirTophamHatt

ответ

2

CORS не зависит от аутентификации. Ваш слой должен наложить ваш ответ CORS поверх вашего фактического ответа. Таким образом, в случае ошибки аутентификации, вот как вы должны ответить:

  1. Предполетный ответ (например, ответ на запрос OPTIONS) должен всегда возвращать HTTP 200, вместе с соответствующими заголовками CORS: Access-Control-Allow-Origin, Access-Control-Allow-Methods и Access-Control-Allow-Headers (при необходимости). В предполетном ответе не должно быть тела.
  2. Фактический ответ должен отвечать 401, если есть ошибка auth. Но он все равно должен иметь заголовки CORS, например. Access-Control-Allow-Origin и т. Д.

Это говорит браузеру, что запрос на перекрестный запрос был успешным, но возникла основная проблема с запросом (например, ошибка auth).

+0

Что значит «ортогонально» – Tony

+0

«Ортогональный» означает «независимый». Я обновил текст. – monsur

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