2017-02-20 11 views
0

У меня есть API-интерфейс loopback, настроенный с использованием Passport, запущенного на порту 3000. Мой пользовательский интерфейс состоит из реакции JS, которая обслуживается с порта 3080. Я хочу реализовать аутентификацию с помощью Google. Для этого, с моей среагировать приложения, я делаю вызов localhost:3000/auth/google Но призыв не перенаправляют на Google из-за ошибки CORS:Включение CORS на основе StrongLoop ReactJS-приложение

Fetch API cannot load http://localhost:3000/auth/google. Redirect from 'http://localhost:3000/auth/google' to 'https://accounts.google.com/o/oauth2/auth?response_type=code&redirect_uri=h…d=584602753475-1kk345gd8trcn31pbg1v2gncajhpakk8.apps.googleusercontent.com' has been blocked by CORS policy: Request requires preflight, which is disallowed to follow cross-origin redirect.

Когда я ударил http://localhost:3000/auth/google URL из свежего браузера вкладка, все работает нормально.

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

Редактировать

я мог видеть, что браузер делает запрос опций к локальной машине: 3000/авториз/Google

Это то, что я получил, когда я сделал варианты запрос с завитком: HTTP/1.1 204 No Content X-Powered-By: Express Vary: Origin Access-Control-Allow-Credentials: true Access-Control-Allow-Methods: GET,HEAD,PUT,PATCH,POST,DELETE Access-Control-Max-Age: 86400 Date: Mon, 20 Feb 2017 14:05:53 GMT Connection: keep-alive

ответ

0

Я не знаю, как включить CORS в Strongloop или ReactJS, но включить его вам нужно две вещи:

1. The right configuration of the JS request like so: 

var params = { 
    … 
    mode: 'cors', 
    credentials: 'include' //<- that gave me some headache a while ago, 
         //but is probably not necessary in your case. 
    … 
} 

fetch(new Request(<url>, params).then(res => …); 
  1. Правильная конфигурация сервера. Запрос cors сначала вызовет сервер с запросом предварительной проверки, который должен сообщить браузеру, если он может получить доступ к этому ресурсу, включая все заголовки. Этот запрос использует метод/глагол http OPTIONS, поэтому ваш сервер должен правильно реагировать на это. Если это произойдет, браузер выполнит фактический запрос, который вы хотите сделать.

Я надеюсь, что это поможет.

+0

благодарит за ответ. У меня есть эта часть в моем запросе на выборку JS. И браузер делает запрос параметров на http: // localhost: 3000/auth/google. Здесь вещи блокируются. –

+0

Вы проверили запрос опций? http://stackoverflow.com/questions/14481850/how-to-send-a-http-options-request-from-the-command-line – philipp

+0

Я попробовал запрос Options. Ответ: «HTTP/1.1 204 Нет содержимого X-Powered-By: Express Vary: Origin Access-Control-Allow-Credentials: true Access-Control-Allow-Methods: GET, HEAD, PUT, PATCH, POST , DELETE Access-Control-Max-Age: 86400 Дата: Пн, 20 Фев 2017 14:05:53 GMT Connection: keep-alive' –