在我的设置中,对路由进行了编程,以在成功通过身份验证后打印Passport返回的所有数据:
// routes/auth-providers/local.js
import express from 'express';
import passport from 'passport';
import jwt from 'jsonwebtoken';
import dotenv from 'dotenv';
import passportSetup from '../../passport-setup';
dotenv.config();
const router = express.Router();
router.post('/',
passport.authenticate('local', { failureRedirect: '/' }),
(req, res) => {
const {username, firstName, lastName} = req.body;
console.log('req.body', req.body);
res.json({ success: true });
}
);
我的本地策略配置如下:
// passport-setup/strategies/local.js
const local = new LocalStrategy (
(username, password, done) => {
User.findOne({ username: username }, (err, user) => {
if(err) { return done(err); }
if (!user) { return done(null, false); }
// if (!user.verifyPassword(password)) { return done(null, false); }
console.log('USER', user);
return done(null, user);
});
}
);
在两个console.log()
语句中,只有第二个给出完整的用户文档,包括firstName,lastName等。但是,我的路由中的第一个(console.log('req.body', req.body);
)仅给出用户名和密码。我什至可以看到用户文档正在序列化:
// passport-setup/index.js
passport.serializeUser((user, done) => {
console.log('SERIALIZE', user);
done(null, user.id);
});
我可能做错了什么?
P.S .:回购位于https://github.com/amitschandillia/proost/tree/master/web供参考。
答案 0 :(得分:2)
我对passport.js
还是陌生的,但是在文档here中,它提到:
如果身份验证成功,则将调用下一个处理程序,并将
req.user
属性设置为已身份验证的用户
所以也许您需要做的就是将req.body
更改为req.user
:
const {username, firstName, lastName} = req.user;