Javascript 无法使用angular 2执行登录验证
嗨,这里我创建了一个登录页面,如果响应正常,那么它必须以其他方式登录,它必须显示错误。以下是我的json数据,我必须正确提供电子邮件和密码:Javascript 无法使用angular 2执行登录验证,javascript,angular,typescript,Javascript,Angular,Typescript,嗨,这里我创建了一个登录页面,如果响应正常,那么它必须以其他方式登录,它必须显示错误。以下是我的json数据,我必须正确提供电子邮件和密码: { Email": "maxwil@ecoweb.com", password:56897 } 以下是我的登录方式: this.serv.getLogin(data.Email,data.password).subscribe(res=>{ if (res.Data.Id === 0 && res.
{
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
}
尽管我提供了详细信息,但我不知道问题出在哪里,错误在这里:
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!
}
{
“数据”:{
“电子邮件”:空,
“Id”:空,
“名称”:空
},
“错误代码”:“501-未找到数据”,
“消息”:“请检查凭据”,
“状态”:false/错误如下:
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!
}
{
“数据”:{
“电子邮件”:空,
“Id”:空,
“名称”:空
},
“错误代码”:“501-未找到数据”,
“消息”:“请检查凭据”,
“Status”:false/问题在于getLogin
回调中的if
语句:
if (res.Data.Id === 0 && res.Data.Id === null || res.Status === 'false') {
此语句永远不能为true,因为res.Data.Id
不能同时为0
和null
,并且res.Status
的类型不匹配:false
(布尔值)在实际结果中,而'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)
问题在于getLogin
回调中的if
语句:
if (res.Data.Id === 0 && res.Data.Id === null || res.Status === 'false') {
此语句永远不能为true,因为res.Data.Id
不能同时为0
和null
,并且res.Status
的类型不匹配:false
(布尔值)在实际结果中,而'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)
那么变化是什么呢?@TechieBoy编辑了答案那么变化是什么呢?@TechieBoy编辑了答案那么我该如何纠正它呢?那么我该如何纠正它呢?它们的键/值对应该在登录json文件中引用…{“Email”:“maxwil@ecoweb.com”,“password”:“56897”}
它们的键/值对应该在登录json文件中引用…{“Email”:“maxwil@ecoweb.com”,“password”:“56897”}