首页 > 解决方案 > 在passportJS中从未使用Google Strategy调用deserializeUser函数

问题描述

我正在尝试使用 PassportJS 设置 google auth,但从未调用过我的 deserializeUser 函数。

这是我的 passport.js 配置:

...
passport.serializeUser(function(user, done) {

        done(null, user.id);

    });

    passport.deserializeUser(function(sessionUser, done) {

      User.findById(sessionUser, function(err, user) {
             done(err, user);
         });
  });

passport.use('google', new GoogleStrategy({
        clientID        : process.env.GOOGLE_CLIENTID,
        clientSecret    : process.env.GOOGLE_CLIENTSECRET,
        callbackURL     : process.env.GOOGLE_CALLBACKURL,
        passReqToCallback: true,
    },
        function(req, token, refreshToken, profile, done) {


            process.nextTick(function() {

                // console.log(profile);

                var values = { 
                    where: { google_id: profile.id }, 
                    defaults: {google_id: profile.id, name: profile.displayName} 
                };

                User.findOrCreate(values)
                .spread(function(user, created) {
                    return done(null,user);
                });
            });
        }
    ));

这些是我的路线:

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


// the callback after google has authenticated the user
app.get('/auth/google/callback',
        passport.authenticate('google', {
                successRedirect : '/portfolio/crypto',
                failureRedirect : '/'
        }));

并且由于从未调用 deserializeUser,因此从未定义 req.user。我怎样才能解决这个问题?

标签: node.jsexpresspassport.js

解决方案


推荐阅读