两个相同的字符串未显示为相等 Javascript Meanjs

Two identical strings not shown as equal Javascript Meanjs

这是一个极其简单和基本的问题,以至于我对可能导致此行为的原因感到困惑。在我的 MEANJS 应用程序中,用户使用 Passport 登录。 User 模型有一个简单的身份验证方法,它在散列后将输入的密码与用户的密码相匹配。这个应用程序已经在生产中,没有任何问题。我一直面临无法更新用户的完全不同的问题,因为保存失败,因为密码字段是必需的,当给出密码时,会导致重新散列密码。重点是,我至少没有弄乱 authenticate 方法,它是标准的 MEANJS authenticate 函数。

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 window 中只是为了验证并且它在那里正确显示:

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

使用 === 运算符时,您不仅要比较字符串值,还要比较对象本身,如果对象不同,即使它们看起来相等,但实际上并不相同。

要解决此问题,请使用 == 进行类型转换,然后比较 p1 和 p2 的字符串值。

Trim leading/trailing 来自 epwdupwd.

的空格