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

两个相同的字符串未显示为相等的Javascript Meanjs,javascript,string,meanjs,Javascript,String,Meanjs,这是一个极其简单和基本的问题,以至于我不知道是什么导致了这种行为。在我的MEANJS应用程序中,用户正在使用Passport登录。用户模型有一个简单的身份验证方法,将输入的密码与散列后的用户密码进行匹配。此应用程序已投入生产,没有任何问题。我一直面临着一个完全不同的问题,即无法更新用户,因为保存失败,因为需要密码字段,这会导致重新设置密码。重点是,我至少没有弄乱authenticate方法,它是标准的MEANJS authenticate函数 UserSchema.methods.authent

这是一个极其简单和基本的问题,以至于我不知道是什么导致了这种行为。在我的MEANJS应用程序中,用户正在使用Passport登录。用户模型有一个简单的身份验证方法,将输入的密码与散列后的用户密码进行匹配。此应用程序已投入生产,没有任何问题。我一直面临着一个完全不同的问题,即无法更新用户,因为保存失败,因为需要密码字段,这会导致重新设置密码。重点是,我至少没有弄乱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窗口中,以验证它们是否正确显示:

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 ePwd string
typeof uPwd string

使用===运算符时,不仅要比较字符串值,还要比较对象本身,如果对象不同,则即使它们看起来相等,也不相同


要修复此问题,请使用==执行类型转换,然后它应该比较p1和p2的字符串值。

epwd
upwd

中修剪前导/尾随空格控制台日志语句的实际输出是什么。把它放到问题中。
console.log(typeof ePwd,typeof uPwd)
发布结果。@SebastianNette两者都是
string
<代码>变量p1='NKZM3DT0TXOZ'//hashPassword(password)var p2='nkzm3dt0txoz'//此.password或如果
p1
不是
string
则使用
p1.toString()
它们可能不是两个字符串。因此,类型比较
==
失败的原因。输出中没有行,在复制粘贴到SO编辑器时,整个哈希字符串分为两行,所以我在纠正散列后错误地留下了空白行。如果你可以把修剪建议加在这个答案上,我会把它标记为正确的,因为你是第一个建议它的。但我不知道为什么突然需要这个:/