您好我在这里创建了一个登录页面,如果响应正常,则必须以其他方式登录才能显示错误。以下是我的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
}
即使我提供了详细信息,但我不知道问题是什么
答案 0 :(得分:1)
错误在于:
res.Status === 'false'
你想要一个布尔值,而不是一个字符串:
res.Status === false // equivalent to !res.Status
因此登录验证失败:
{
"Data": {
"Email": null,
"Id": null,
"Name": null
},
"ErrorCode": "501 - No Data Found",
"Message": "Please Check Credentials",
"Status": false // <---- Boolean!
}
此外,您的if
逻辑存在缺陷。 res.Data.Id === 0 && res.Data.Id === null
永远不会遇到这种情况,变量不能同时为0
和null
。
答案 1 :(得分:1)
问题在于getLogin
回调中的if (res.Data.Id === 0 && res.Data.Id === null || res.Status === 'false') {
声明:
res.Data.Id
此声明永远不会成立,因为0
不能同时null
和res.Status
且false
的类型不匹配:{实际结果中的{1}}(布尔值)和语句中的'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)