如何通过Passport获取当前已认证用户ID用于Mongoose数据更新
获取Passport已认证用户ID的实现方法
Passport完成身份校验后,会自动将当前登录的用户信息挂载到请求对象的req.user属性上,你使用的passport-local-mongoose是对local本地认证策略的封装,完全遵循这个逻辑,只要通过req.isAuthenticated()校验的请求,都可以直接从这个属性上取到用户数据。
你需要的用户ID直接取req.user._id即可,对应修改后的可运行代码如下:
app.post("/updateUser", (req, res) => { if(req.isAuthenticated()){ Users.updateOne( { _id: req.user._id // 取已认证用户的主键ID作为匹配条件 }, { test: "works!" }, err => { if(err) return res.status(500).send("用户信息更新失败"); res.send("用户信息更新成功"); }); } else { // 必须补充未认证场景的返回逻辑,避免请求挂起无响应 return res.status(401).send("当前未登录,无操作权限"); } });
- 扩展提示:后续如果需要获取当前登录用户的其他字段(比如用户名、注册手机号、角色权限等),可以直接通过
req.user.对应字段名读取,不需要额外查数据库。 - 注意事项:如果你手动修改过Passport的序列化/反序列化逻辑,只把用户ID存入session、没有反查完整用户文档,那
req.user本身存储的就是用户ID,直接传入匹配条件即可,passport-local-mongoose的默认配置不需要做这个适配。
内容的提问来源于stack exchange,提问作者philale
相关产品推荐
相关产品推荐

