无法使用角度2

时间:2018-03-13 12:23:33

标签: 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.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
}

即使我提供了详细信息,但我不知道问题是什么

2 个答案:

答案 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永远不会遇到这种情况,变量不能同时为0null

答案 1 :(得分:1)

问题在于getLogin回调中的if (res.Data.Id === 0 && res.Data.Id === null || res.Status === 'false') { 声明:

res.Data.Id

此声明永远不会成立,因为0不能同时nullres.Statusfalse的类型不匹配:{实际结果中的{1}}(布尔值)和语句中的'false'(字符串)。

更改语句的第二部分以检查res.Status是否为false:

if ([...] || !res.Status)

如果0null都是登录失败的迹象,请更改语句的第一部分:

if (res.Data.Id === 0 && res.Data.Id === null || [...])

由于0null都是falsy值,您可以将此语句简化为以下内容:

if (!res.Data.Id || !res.Status)