Google oauth20 的 Passport,未使用中间件,passport.initialize()

Posted

技术标签:

【中文标题】Google oauth20 的 Passport,未使用中间件,passport.initialize()【英文标题】:Passport for Google oauth20, middleware not in use, passport.initialize() 【发布时间】:2018-07-04 15:16:54 【问题描述】:

我正在使用 passport-google-oauth20、mongoose、mlab 进行用户身份验证。 一旦我从 google auth 收到回调,我会在 done mehhod 中收到以下错误:

UnhandledPromiseRejectionWarning:未处理的承诺拒绝(拒绝 id:3):错误:passport.initialize() 中间件未使用

我附上了我的代码库的屏幕截图。 提前致谢!

const passport = require('passport');
const GoogleStrategy = require('passport-google-oauth20').Strategy;
const mongoose = require('mongoose');
const Keys = require('../config/dev');
const User = mongoose.model('users');

passport.serializeUser((user, done) => 
  done(null, user.id);
);
passport.deserializeUser((id, done) => 
  User.findById(id).then(user => 
    done(null, user);
  );
);
passport.use(new GoogleStrategy(
    clientID: Keys.GOOGLE_CLIENT_ID,
    clientSecret: Keys.GOOGLE_CLIENT_SECRETKEY,
    callbackURL: "/auth/google/callback"
  ,(accessToken, refreshToken, profile, done) => 
        User.findOne(googleID: profile.id).then((existingUser) => 
            if(existingUser)
                console.log('existing');
                //This above log is printing fine and then here I am getting error
                done(null, existingUser);
             else
                console.log('new');
                new User(googleID: profile.id).save()
                .then((user) => done(null, user);)
            
        )
   
));

【问题讨论】:

【参考方案1】:

请查看passport-google-oauth2 您的错误看起来像是您错过了初始化护照:

app.use( passport.initialize());
app.use( passport.session());

【讨论】:

以上是关于Google oauth20 的 Passport,未使用中间件,passport.initialize()的主要内容,如果未能解决你的问题,请参考以下文章

使用 google-passport-oauth 登录后 req.user 未定义

text Passport JS google oauth

javascript DEFAULT passport-google-oauth

Passport.js 在 nginx 上表达 google oauth 502 Bad Gateway

req.user.displayname 未定义 Nodejs + passport = google oauth

Gmail 的 XOAuth2 错误凭据无效