会在登录/注册时填充数据"/>
passport.js不会在登录/注册时填充数据
版本:
- “护照”:“ 0.4.1”,
- “本地护照”:“ 1.0.0”,
- “ passport-local-mongoose”:“ 6.0.1”
- “ express”:“ 4.17.1”,
- “ express-session”:“ 1.17.1”,
我的会话中间件
let sessionMiddleware = session({
store: sessionStore,
secret: process.env.SECRET,
resave: false,
saveUninitialized: false,
cookie: {
secure: false,
httpOnly: true
}
});
对于serializeUser / deserializeUser,我正在使用我的自定义回调:
passport.serializeUser((user, done) => {
db.User.findById(user._id)
.populate('role', ['code'])
.exec((err, data) => {
if (err) {
console.info('\n Error:', err);
} else {
console.info(11, data);
done(null, data);
}
})
});
passport.deserializeUser((user, done) => {
db.User.findById(user._id)
.populate('role', ['code'])
.exec((err, data) => {
if (err) {
console.info('\n Error:', err);
} else {
done(null, data);
}
})
});
它可以处理任何请求,并且我可以很好地获得用户角色。但这对登录无效:
// User object from passport.authenticate callback
{
_id: 5eb8596e049f2131487725eb,
email: '[email protected]',
login: 'test',
role: 5eb855dc91fd0548fc968939,
salt: /* MY SALT */,
hash: /* MY PASSWORD HASH */,
createdAt: 2020-05-10T19:43:42.797Z,
updatedAt: 2020-05-10T19:43:42.797Z,
__v: 0
}
但是serializeUser确实起作用,并且在身份验证之后被调用,返回带有正确角色对象的User对象:
// user object on serialize-deserialize User, i.e. on any request other than login/signup
{
_id: 5eb8596e049f2131487725eb,
email: '[email protected]',
login: 'test',
role: { _id: 5eb855dc91fd0548fc968939, code: 'tech_sup' },
createdAt: 2020-05-10T19:43:42.797Z,
updatedAt: 2020-05-10T19:43:42.797Z,
__v: 0
}
问题是,在通行证之后填充。因此,它没有更新req.user。
如何使护照在登录/注册时用猫鼬填充数据?
回答如下:如果有人正在为同一问题而苦苦挣扎:
我也在使用passport-local-mongoose
,我想在其他任何商店都需要相同的东西:
1)确保您的password.serializeUser接受默认处理程序(在我的情况下为db.User.serializeUser())2)在将护照本机猫鼬用于用户架构的地方,添加下一个选项-findByUserName:
User.plugin(passportMongoose, {
/** any other options you use for passport-local-mongoose plugin */
[...pluginOptions]
/** added option to solve the problem */
findByUsername: (model, queryParameters) => model.findOne(queryParameters).populate('role', ['code']),
});
更多推荐
passport.js不会在登录/注册时填充数据
发布评论