Node Mongo Express用户注册正常但登录失败求助
登录功能失效问题排查与修复建议
核心问题定位
你的登录逻辑失效的根本原因是错误调用了实例方法:isCorrectPassword是定义在UserSchema.methods上的实例方法,必须通过查询到的用户对象(user)调用,而不是直接通过User模型调用。
具体修复步骤
- 修正登录路由中的方法调用
在app.js的/autenticate路由中,将User.isCorrectPassword改为user.isCorrectPassword,同时规范状态码使用:
app.post('/autenticate', function (req, res) { const { username, password } = req.body; User.findOne({ username }, function (err, user) { if (err) { res.status(500).send('服务器内部错误'); } else if (!user) { res.status(404).send('用户不存在'); // 500用于服务器错误,用户不存在用404更合理 } else { // 改为用查询到的user实例调用方法 user.isCorrectPassword(password, function (err, result) { if (err) { res.status(500).send('认证错误'); } else if (result) { res.status(200).send('用户认证成功'); } else { res.status(401).send('用户名或密码错误'); // 401表示未授权,符合语义 } }); } }); });
- 可选优化:修正路由拼写
当前登录路由为/autenticate(缺少字母h),建议修正为标准拼写/authenticate,避免前后端路径不匹配的潜在问题。
验证逻辑说明
user.js中的isCorrectPassword方法实现是正确的:它通过bcrypt.compare对比明文密码与数据库存储的哈希密码,返回验证结果。只要调用方式正确,就能正常完成密码校验。
内容的提问来源于stack exchange,提问作者Valerio Viale
相关产品推荐
相关产品推荐

