【发布时间】:2019-08-22 02:32:57
【问题描述】:
在我的设置中,路由被编程为在成功验证后打印 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() 语句中,只有第二个给出了整个用户文档,包括名字、姓氏等。但是,我的路线中的第一个(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 以供参考。
【问题讨论】:
-
req.body取决于您从客户端发送的内容,因此您可能只是发送了用户名和密码。 -
我认为在这种情况下
req.body是由 Passport 发送的?如果您看到上面的代码,Passport 能够从数据库中检索完整的用户对象,如new LocalStrategy ()中的console.log()所示。然而,当我尝试读取路径中的 body 对象时,它只显示用户名和密码。