身份验证App获取登录用户个人资料始终显示同一用户错误排查
问题修复方案
核心问题原因
你遇到的所有用户登录都展示同一份资料的问题,根源在服务端/profile接口的查询逻辑错误,另外代码中还存在模型名混用的潜在BUG,按以下步骤修复即可:
修复步骤
1. 修复获取用户资料接口的查询逻辑
你当前/profile接口的查询条件完全错误:
// 错误代码 let user = await User.findOne({ user: req.user.id }).select('-password');
jwt中存储的req.user.id是用户表的主键_id的值,你写的{user: req.user.id}是查询表中user字段等于该值的数据,你的用户表根本没有user字段,会导致查询直接返回表中第一条数据,也就是你看到的固定同一个用户的信息。
修改为:
// 正确代码 let user = await User.findById(req.user.id).select('-password');
2. 统一模型名,修复混用问题
你代码开头仅引入了User模型:
const User = require('./models/User');
但在注册接口、编辑接口中混用了不存在的AuthUser变量,会导致逻辑异常,全局搜索所有AuthUser替换为User即可:
- 注册接口的
await AuthUser.findOne({ email })、new AuthUser({...})全部替换为User - 编辑接口的
await AuthUser.findById(req.params.id)替换为User
3. 修复编辑接口的返回逻辑(可选优化)
你编辑接口更新后返回的是手动拼接的data对象,建议直接返回更新后的user对象即可,保证返回字段和其他接口一致:
// 原代码 return res.json(data); // 修改为 return res.json(user);
内容的提问来源于stack exchange,提问作者Ope Afolabi
相关产品推荐
相关产品推荐

