nonode.js/express/passport挂在Google-oath登录后



我正在尝试学习node.js,并与Google Oauth一起进行Express Login存储cookie的头痛。我正在使用mongoDB,用户可以保存而没有问题。

我可以登录正常,但是当我设置cookie baaaam时。但是控制台上没有错误。

如果我尝试使用cookie-session和express设置cookie,则该应用程序悬挂,我将无法访问任何路由'/'/''/of the the the the the/cobout'。我只有在浏览器上清除cookie时才能再次访问它们。我在这一点上被困。

这是我的app.js

app.use(
    cookieSession({
        maxAge: 30 * 24 * 60 * 60 * 1000,
        keys: [keys.cookieSession]
    })
);
app.use(passport.initialize());
app.use(passport.session());

我的路线

app.get('/auth/google',
  passport.authenticate('google', { 
    scope: ['profile', 'email'] 
  })
);
app.get('/auth/google/callback', passport.authenticate('google'));
app.get('/api/logout', (req, res) => {
    req.logout();
    res.send(req.user);
 });

和我的Passport.js

passport.serializeUser((user, done) => { 
    done(null, user.id);
});
passport.deserializeUser((id, done) => {
    User.findById(id).then(user => {
        done(err, user);
    });
});
passport.use( new GoogleStrategy({
    clientID: keys.googleClientID,
    clientSecret: keys.googleClientSecret,
    callbackURL: '/auth/google/callback'
    },
    (accessToken, refreshToken, profile, done) => {
        User.findOne({ googleId: profile.id }).then((existingUser) => {
                if (existingUser) {
                // don't create a new user
                done(null, existingUser);
                } else {
                // create a new user    
                new User ({ googleId: profile.id }).save()
                .then(user => (null, user));
                }
            })
    }   
));

,所以我能够工作,但是我想知道做错了什么。

我更改了此操作,它奏效了,任何人都有线索吗?

passport.deserializeUser((id, done) => {
    User.findById(id).then(user => {
        done(err, user);
    });
});

to

passport.deserializeUser((id, done) => {
    User.findById(id, (err, user) => {
        done(err, user);
    });
});

最新更新