Intereting Posts

паспорт google oauth на localhost

Я совершенно новый при использовании паспорта для аутентификации по узлу, следовательно, множество fragmentов кода

мой сервер настроен как:

var router = require('./app/config/routes'); var googleStrategy = require('./app/config/passport'); var session = require("express-session"); var passport = require('passport'); app.use(session({secret : ''})); app.use(passport.initialize()); app.use(passport.session()); googleStrategy(passport); 

мои маршруты настроены как

 module.exports = function(app, passport) { app.get('/auth/google', function() { passport.authenticate('google', {scope: ['profile', 'email']}); }); app.get('/auth/google/callback', function() { passport.authenticate('google', { successRedirect: '/profile', failureRedirect: '/fail' }); }); .... ALSO configured /profile and /fail }; 

мой паспорт настроен как

 passport.serializeUser(function(user, callback){ console.log('serializing user.'); callback(null, user); }); passport.deserializeUser(function(user, callback){ console.log('deserialize user.'); callback(null, user); }); var processRequest = function(token, refreshToken, profile, callback){ process.nextTick(function(){ console.log('id : '+ profile.id); console.log('name :'+ profile.displayName); console.log('email :' + profile.emails); console.log('token : '+ token); }); }; passport.use(new GoogleStrategy({ clientID: 'client ID', clientSecret : 'client SECRET', callbackURL : 'http://127.0.0.1:8080/auth/google/callback', realm : 'http://127.0.0.1:8080' }, processRequest)); 

Проблема: при переходе в /auth/google я никогда не получаю экран подтверждения. На что я должен смотреть?

Обновить :

изменение маршрутов до конфигурации, показанной ниже, заставило ее работать.

  app.get('/auth/google', passport.authenticate('google', {scope: ['profile', 'email']}) ); app.get('/auth/google/callback', passport.authenticate('google', { successRedirect: '/profile', failureRedirect: '/fail' }) ); 

В настоящее время протокол OAUTH2 для аутентификации и аутентификации хорошо поддерживается google.So. Лучше использовать то же самое. Вот документация Google на нем. Используйте модуль «паспорт-google-oauth» . Вот реализация. Это должна быть конфигурация объектов приложения, а также увидеть, что объект oauth2strategy используется из модуля pass-google-oauth, а также проверить области в регистрации маршрута app.get.

 var googleStrategy = require('passport-google-oauth').OAuth2Strategy; app.configure(function() { app.set('views', './views'); app.set('view engine', 'jade'); app.use(express.favicon()); app.use(express.logger('dev')); app.use(express.cookieParser()); app.use(express.bodyParser()); app.use(express.session({secret:'MySecret'})); app.use(passport.initialize()); app.use(passport.session()); app.use(express.methodOverride()); app.use(app.router); app.use(express.static('./public')); }); app.get('/auth/google', select.passport.authenticate('google',{scope: 'https://www.googleapis.com/auth/plus.me https://www.google.com/m8/feeds https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile'})); app.get('/auth/google/callback', function() { passport.authenticate('google', { successRedirect: '/profile', failureRedirect: '/fail' }); }); app.get('/logout', function (req, res) { req.logOut(); res.redirect('/'); }); 

Но прежде чем создавать новую страtagsю, перейдите в консоль разработчика googles и получите идентификатор клиента и секрет. Вот шаги

  1. перейдите по этой ссылке и создайте проект, вот снимок того же введите описание изображения здесь
  2. дать новое имя проекта и идентификатор, вот снимок введите описание изображения здесь
  3. Это займет примерно минуту, чтобы создать новый проект, как только ваш новый проект будет создан, он перенаправит вас в конфигурацию приложения вашего приложения. На перенаправленной странице выберите APIS AND AUTH -> API , на странице API включите GOogle + API, вот его снимок введите описание изображения здесь
  4. затем перейдите к учетным данным (ниже API), затем нажмите « Создать новый идентификатор клиента» и зарегистрируйте домены и обратные вызовы для своего приложения (настройте домен как localhost), вот его снимок! введите описание изображения здесь 5. Затем вы получите свой новый идентификатор и секрет. Используйте их для создания новой страtagsи

     passport.use(new googleStrategy({ clientID: '', clientSecret: '', callbackURL: "http://locahost:8080/auth/google/callback" }, function (accessToken, refreshToken, profile, done) { console.log(profile); //profile contains all the personal data returned done(null, profile) } )); 

6.now сериализовать и десериализовать

 passport.serializeUser(function(user, callback){ console.log('serializing user.'); callback(null, user.id); }); passport.deserializeUser(function(user, callback){ console.log('deserialize user.'); callback(null, user.id); }); 

запустите сервер и перейдите на localhost: 8080 / auth / google (не используйте 127.0.0.1:8080 вместо locahost). Это должно заставить его работать 🙂

[Другие полезные ссылки: ознакомьтесь с первым комментарием kvcrawford о репо модуля на этой странице. Passport-google – еще один популярный модуль, который используется для предоставления логина с использованием google, теперь он устарел, вот ссылка на его недавние проблемы]

В большинстве примеров в Интернете код маршрутизации выполняется следующим образом:

 app.get('/auth/google', passport.authenticate('google')); 

Согласно Express Reference , обратные app.get метода app.get даются три аргумента, request , response и «следующий». Это означает, что метод аутентификации в приведенном выше примере возвращает объект функции, и он выполняется с тремя аргументами request , response и «следующего».

Итак, если вы хотите сделать аутентификацию в функции обратного вызова метода app.get следующим образом:

 app.get('/auth/google', function() { passport.authenticate('google', {scope: ['profile', 'email']}); }); 

то вы должны написать:

 app.get('/auth/google', function(request, response, next) { passport.authenticate('google', {scope: ['profile', 'email']})(request, response, next); }); 

Я согласен с вами @Seiya, но я бы добавил redirect

 app.get( "/auth/google/callback", passport.authenticate('google'), (req, res) => { res.redirect('/whatever') } );