Аутентификация Google по паспорту с помощью javascript fullstack

#angularjs #express #mean-stack #passport.js

#angularjs #экспресс #средний стек #passport.js

Вопрос:

Я пытаюсь добавить аутентификацию Google с помощью passport в свое приложение, которое было сгенерировано с помощью yeoman fullstack-generator.

Внутри моего контроллера входа в систему у меня есть этот запрос:

 $scope.googleAuth = function(){
  $http.get('/auth/google');
};
  

но когда я вызываю эту функцию, у меня возникает эта ошибка:

XMLHttpRequest cannot load https://accounts.google.com/o/oauth2/auth?response_type=codeamp;redirect_uri=h…d=<my-client-ID-here>. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:9000' is therefore not allowed access.

Я попытался исправить эту проблему, добавив промежуточный слой в мой express.js файл:

 app.use(function (req, res, next) {

  // Website you wish to allow to connect
  res.setHeader('Access-Control-Allow-Origin', 'http://localhost:9000');

  // Request methods you wish to allow
  res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');

  // Request headers you wish to allow
  res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');

  // Set to true if you need the website to include cookies in the requests sent
  // to the API (e.g. in case you use sessions)
  res.setHeader('Access-Control-Allow-Credentials', true);

  // Pass to next layer of middleware
  next();
});
  

но это все еще не работает.
Правильное ли это решение? и безопасно ли это?

Ответ №1:

Я исправил проблему, используя гиперссылку вместо кнопки следующим образом

 <a target="_self" href="/auth/google" class="btn btn-danger">Google </a>
  

Я использовал target="_self" в противном случае угловые перенаправления на домашнюю страницу, потому что, я думаю, он рассматривает /auth/google как маршрут моего приложения.

Комментарии:

1. Как вы передаете результат аутентификации (т.Е. Пользовательский объект) Обратно на ваш контроллер?

2. 1 Спасательный круг.. Потратьте на это более 3 часов. 🙂 Огромное спасибо.