用户登录时总是显示“密码无效”;在MEAN中出现错误

User login always display "Invalid password" error in MEAN

本文关键字:MEAN 错误 密码无效 无效 登录 显示 密码 用户      更新时间:2023-09-26

我正在尝试使用mongoose和mongoDB作为数据库在node.js中编写一个简单的用户登录方法。每次我注册一个新用户,我都可以用这些凭据登录几次,但不知何故,它开始显示错误"无效密码"。任何帮助都会很感激。下面是代码片段:

HTML文件:

<form>
    <p>Email: <input type="email" ng-model="LC.logInfo.email" required></p>
    <p>Password: <input type="password" ng-model="LC.logInfo.password" required></p>
    <input type="submit" value="Login" ng-click="LC.login()" class="logreg_button">
</form>

user.js (model file)

UserSchema.methods.validPassword = function(enteredPassword){
return bcrypt.compareSync(enteredPassword, this.password)
    }
UserSchema.pre('save', function(next){
var user = this
bcrypt.genSalt(10, function(err,salt){
    if(err) console.log(err);
    bcrypt.hash(user.password, salt, function(err, hash){
        if(err) console.log(err);
        user.password = hash;
        next();
    });
});
})

users.js(服务器端控制器文件)

login: function(req,res){
    User.findOne({email: req.body.email}, function(err, user){
        if(err) {
            res.json({status: false, errors:err});
        }
        else if(user){
            if(user.validPassword(req.body.password)){
                req.session['userInfo'] = {
                id: user._id,
                first_name: user.first_name
                }
                res.json({status:true, userInfo: req.session['userInfo'] })
            } else {
                res.json({status: false, errors: 'Invalid password!'})
            }
        } else {
            res.json({status: false, errors: 'User not found!'})
        }
    })
},

login服务无关。

pre save钩子中生成散列密码。这第一次是正确的,但是当用户需要更新时,这个钩子会破坏密码。

你需要用其他方法来处理它。例如,在pre save钩子,你会检查如果用户是新的或不是,如果它是新的,然后散列密码。