Passport没有't将子文档保存到req.user
Passport doesn't save subdocument to req.user
passport.js
passport.serializeUser(function(user, done) {
done(null, user._id);
});
passport.deserializeUser(function(id, done) {
User
.findById(id).exec()
.then(function(user) {
done(null, user);
}, done)
;
});
passport.use(new LocalStrategy(function(username, password, done) {
Local
.findOne({ username: username })
.select('username role hashedPassword')
.exec()
.then(function(local) {
if (!local) {
return done(null, false);
}
var validPassword = bcrypt.compareSync(password, local.hashedPassword);
if (!validPassword) {
return done(null, false);
}
else {
User
.findOne({ local: local })
.populate('local')
.exec()
.then(function(user) {
console.log('user: ', user); // has subdocument
return done(null, user);
})
;
}
})
;
}));
auth.routes.js
router.get('/current-user', Auth.isLoggedIn, function(req, res) {
console.log('req.user: ', req.user); // doesn't have subdocument
res.status(200).json(req.user);
});
输出
user: { _id: 55d8c6f7e1092f25bb761690,
local:
{ _id: 55d8c6f7e1092f25bb76168f,
username: 'a',
role: 'user',
__v: 0 },
__v: 0 }
✓ Can log in with valid credentials
req.user: { _id: 55d8c6f7e1092f25bb761690,
local: 55d8c6f7e1092f25bb76168f,
__v: 0 }
当我将用户保存到req.user
(在passport.js
中(时,它具有子文档local
。但当我稍后尝试访问req.user
时,它会给我ObjectId
而不是子文档。
为什么会这样?如何获取子文档而不是ObjectId
?
Passport大致是这样工作的:
- 当用户尚未登录时调用该策略;如果登录被接受,则传递给回调的用户将被传递给
serializeUser()
,以便(部分(存储在会话存储中。在您的情况下,您将用户_id
存储在会话存储中 - 当用户登录时(换句话说,当存在有效会话时(调用
deserializeUser()
。会话值(_id
(被传递给它,传递给回调的值被存储为req.user
因此,您也需要从deserializeUser()
填充local
,否则它在req.user
中不可用。
相关文章:
- 如何在外部文档中使用javascript将文本区域的内容保存为变量
- 谷歌文档如何拦截Ctrl-S/Command-S来保存文档而不是html页面
- RichEditor Onlyoffice编辑和保存文档
- 保存后访问子文档 ID - 猫鼬
- 使用mongoose保存多个文档时的错误处理
- 编辑以前保存的文档也会更新数据库中的文档
- JavaScript-使用sessionStorage保存文档之间共享的复选框状态
- firefox扩展可以修改HTML文档的DOM,然后保存为HTML
- 将多个文档中的字段保存到对象
- 如何使用撤消管理器确定文档是否有未保存的更改
- 从OpenShift Mongodb保存文档
- AppleScript 从网页特定部分的 URL 保存文档
- Photoshop Javascript 脚本保存和关闭文档
- 在Javascript(Angular)中读取,更改和保存文档
- 我的文档何时使用猫鼬保存功能保存
- 在带有猫鼬的 mongodb 中加载和保存文档
- OrientDB函数:无法保存文档
- 用窗口打开时保存文档.在chrome中打开
- 保存文档()函数从NSIWebBrowserPersist
- 每当我保存文档编辑器添加额外的空格、段落和换行符时,换行符和段落就会翻倍