我有一个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)
,然后看到有一个用户。