这是一个非常简单和基本的问题,在某种程度上,我对可能导致此行为的原因感到困惑。在我的MEANJS应用程序中,用户使用Passport登录。 User模型有一个简单的身份验证方法,它将输入的密码与用户的密码进行哈希处理。这个应用程序已经投入生产,并没有任何问题。我一直面临着无法更新用户的完全不同的问题,因为保存失败,因为需要密码字段,这在给定时会导致重新密码。重点是,我至少没有认证方法,它是标准的MEANJS认证功能。
UserSchema.methods.authenticate = function(password) {
console.log('password being authenticated is ' + password);
console.log('Hash password is : ' + this.hashPassword(password));
console.log('User\'s existing pwd is : ' + this.password);
var ePwd = this.hashPassword(password);
var uPwd = this.password;
if(ePwd === uPwd){
console.log('TRUE'); //THIS IS NOT DISPLAYED
}
return this.password === this.hashPassword(password);
};
即使我的密码完全相同,也不会返回true。要检查并且因为我正在记录我复制的值,我将其粘贴到我的Chrome ScratchJS窗口中以验证并在那里正确显示:
var p1 = 'nkzm3dT0tjxOZ'; //hashPassword(password)
var p2 = 'nkzm3dT0tjxOZ'; //this.password
if(p1 === p2){console.log('TRUE');} //WORKS
为什么这会发生?由于正在重试这些值,因此我可能没有任何可能的干扰。我相信它可能是无限愚蠢的东西,但这真的让我起了作用。我非常感谢任何帮助,包括砖块。
控制台输出
password being authenticated is mypassword
Hash password is : nkzm3dT0tjxOZSRfsoNckNomgVouYvaw7WYEpqL4G6ovFTSDeosnxfHecNUhsvDWwcXIBzopsvLx1HZiX+
User's existing pwd is : nkzm3dT0tjxOZSRfsoNckNomgVouYvaw7WYEpqL4G6ovFTSDeosnxfHecNUhsvDWwcXIBzopsvLx1HZiX+
我必须指出,直到几个小时之前,这种情况一直很好。
TYPEOF结果
typeof ePwd string
typeof uPwd string
答案 0 :(得分:1)
当使用===运算符时,您不仅要比较字符串值,还要比较它们自己的对象,如果对象不同,那么即使它们看起来相同,也不是。
要修复此使用==进行类型转换,则应比较p1和p2的字符串值。
答案 1 :(得分:1)
修剪epwd
和upwd
的前导/尾随空格。