Метод OPTIONS не разрешен при запросе токена OAuth2

У меня есть простая сборка бэкенда node.js на Restify с реализованной авторизацией OAuth2 (плагин restify-oauth2).

У меня проблема с запросом токена. Когда я вызываю метод POST с моим REST-клиентом, все работает правильно, и я получаю access_token и token_type.

Проблема возникает, когда я пытаюсь сделать то же самое в своем внешнем приложении, созданном в Angular, используя Restangular. Он вызывает метод OPTIONS перед отправкой фактического POST, и сервер отвечает ошибкой:

XMLHttpRequest cannot load http://localhost:8080/token?grant_type=client_credentials.
Invalid HTTP status code 405

Вот мои настройки CORS на бэкэнде:

server.pre(
function crossOrigin(req,res,next){
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Authorization");
    res.header("Access-Control-Allow-Methods", "GET, POST, OPTIONS");
    return next();
  }
);
server.use(restify.fullResponse());

И это вызов REST, используемый во внешнем интерфейсе:

Restangular.one('token').post(
  null, 
  null, 
  {grant_type: "client_credentials"}, 
  {Authorization: "Basic bXlsb2dpbjpteXBhc3M="}
)

Может ли кто-нибудь помочь мне понять, как заставить его работать?


person zorza    schedule 02.07.2015    source источник
comment
Вы не настроили свой сервер для ответа на запросы OPTIONS, поэтому метод не разрешает код состояния. Вы настраиваете его так же, как отвечаете на запросы GET. server.options('*',function (req,res,next){...});   -  person Kevin B    schedule 02.07.2015
comment
К сожалению, конечная точка /token создается автоматически плагином OAuth2. Я понятия не имею, как настроить его ответ на запросы OPTIONS. Вы знаете способ сделать это?   -  person zorza    schedule 02.07.2015
comment
См. ответ здесь: stackoverflow.com/a/25532150/400654   -  person Kevin B    schedule 02.07.2015
comment
@KevinB Это действительно помогло. Большое спасибо   -  person zorza    schedule 02.07.2015