两个相同的字符串未显示为相等 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 来自 epwd
和 upwd
.
的空格
这是一个极其简单和基本的问题,以至于我对可能导致此行为的原因感到困惑。在我的 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 来自 epwd
和 upwd
.