嗨,我在这里创建了一个登录页面,如果响应正常,则必须登录,否则必须显示错误。下面是我的 json 数据,我必须正确提供电子邮件和密码:
{
Email": "maxwil@ecoweb.com",
password:56897
}
以下是我的登录方法:
this.serv.getLogin(data.Email,data.password).subscribe(res=>{
if (res.Data.Id === 0 && res.Data.Id === null || res.Status === 'false') {
alert('please check the username or password');
return false;
} else {
console.log(res);
localStorage.setItem('UserDetails', JSON.stringify(res));
this.router.navigate(['/TrackDriver']);
return true;
}
},err => {
console.log(err);
});
这里的问题是,即使我提供了不正确的用户名和密码,它仍然可以登录。 如果我使用上面的邮件 ID 和密码正确登录
{
"Data": {
"Email": "maxwil@ecoweb.com",
"Id": "1",
"Name": "Admin"
},
"ErrorCode": "201 - Success",
"Message": "Success",
"Status": true
}
如果提供不正确的详细信息,它也会登录并获取此响应
{
"Data": {
"Email": null,
"Id": null,
"Name": null
},
"ErrorCode": "501 - No Data Found",
"Message": "Please Check Credentials",
"Status": false
}
尽管我提供了详细信息,但它正在登录,我不知道问题是什么
最佳答案
问题出在 getLogin
回调中的 if
语句:
if (res.Data.Id === 0 && res.Data.Id === null || res.Status === 'false') {
此语句永远不可能为真,因为 res.Data.Id
不能同时为 0
和 null
并且res.Status
的类型不匹配:实际结果中的 false
( bool 值)和语句中的 'false'
(字符串)。
更改语句的第二部分以检查 res.Status
是否为 false:
if ([...] || !res.Status)
如果0
和null
都是登录失败的标志,则更改语句的第一部分:
if (res.Data.Id === 0 && res.Data.Id === null || [...])
由于 0
和 null
都是 falsy
值,因此您可以将此语句简化为以下内容:
if (!res.Data.Id || !res.Status)
关于javascript - 无法使用 Angular 2 执行登录验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49256129/