Mongoose 护照号码';t返回用户名和密码以外的字段
在我的设置中,路由编程为在成功验证后打印Passport返回的所有数据:Mongoose 护照号码';t返回用户名和密码以外的字段,mongoose,passport-local,Mongoose,Passport Local,在我的设置中,路由编程为在成功验证后打印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'; do
// 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(console.body',req.body);
)只给出了用户名和密码。我甚至可以看到正在序列化的用户文档:
// passport-setup/index.js
passport.serializeUser((user, done) => {
console.log('SERIALIZE', user);
done(null, user.id);
});
我可能做错了什么
附言:回购协议可供参考。我对passport.js仍然是新手,但在文件中提到:
如果验证成功,将调用下一个处理程序,并将req.user
属性设置为已验证的用户
因此,也许您需要做的只是将req.body
更改为req.user
:
const {username, firstName, lastName} = req.user;
req.body
取决于您从客户端发送的内容,所以您可能只发送了用户名和密码。我认为在这种情况下,req.body
是通过Passport发送的?如果您看到上面的代码,Passport能够从数据库中检索完整的用户对象,如newlocalstrategy()
中的console.log()
所示。然而,当我尝试读取路径中的body对象时,它只显示用户名和密码。