会话未设置:Express,Cookie会话,PassportJS

时间:2019-07-24 13:42:12

标签: node.js express passport.js

我有一个Express,PassportJS和cookie会话的简单应用程序用于Google身份验证:

这是server.js:

const app = express();
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'], session: true
}));

app.get('/auth/google/callback',
    passport.authenticate('google', {session: true}), (req, res) => {
        res.send('ok')
})

app.get('/api/current-user', (req, res) => {
    console.log('req')
   res.send(req.user);
});

Google策略:

passport.serializeUser((user, done) => {
console.log(user)
done(null, user.id);
});

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

passport.use(new GoogleStratergy({
    clientID: keys.googleClientID,
    clientSecret: keys.googleSecret,
    callbackURL: '/auth/google/callback'
}, (accessToken, refreshToke, profile, done) => {
    User.findOne({ googleId: profile.id })
    .then((user) => {
        if (user) {
            done(null, user);
        } else {
            new User({
                googleId: profile.id
            }).save()
                .then((user) => {
                    done(null, user);
                });
        }
    });

一切正常。当我访问auth/google时,如果用户是新用户,则创建它;如果不是,则创建它-选择它。问题是当我访问/api/current-user时。 req.user未定义。在WEB控制台中没有cookie。

passport.use(new GoogleStratergy中,我可以放console.log(user),然后看到有一个用户。

0 个答案:

没有答案