“Promise <any>”类型中不存在属性“令牌”

时间:2018-05-15 11:35:56

标签: angular token

我想处理一个令牌。但得到消息:

“承诺”

类型中不存在“令牌”属性

我有以下代码。我得到了一个带有属性令牌的json。顺便说一下,我使用的是一个使用Angular 2的教程。我已经在没有['token']的情况下尝试过了。但没有成功。我也有一个帖子的接口,但我没有使用它来消除错误。它也不适用于界面。

这是我的代码:

signin(email: string, password: string) {
    return this.http.post<any>('http://127.0.0.1:8000/api/userLogin',
      { email: email, password: password },
    this.httpOptions).map((response: Response) => {
      const token =  response.json()['token'];
      const base64Url = token.split('.')[1];
      const base64 = base64Url.replace('-', '+').replace('_', '/');
      return JSON.parse(window.atob(base64));
    });

  }

教程:

https://www.youtube.com/watch?v=pT9_FngJuzY&t=321s

顺便说一句,在这种情况下,我使用laravel / passport。

success:
{token: "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6IjllOW…lsJiIWVmiiNY1Ft02MSWGS-Thx7_warYrUucP8bPHHnyMCfnU"}

1 个答案:

答案 0 :(得分:1)

为什么不使用Serializable类。

这是我针对此问题的解决方案,方法是参考:Angular2 HTTP GET - Cast response into full object

export class MdfResponse {
  public message?: string;
  public token?: string;

  constructor() {}

  fromJSON(json) {
    for (var propName in json)
       this[propName] = json[propName];
    return this;
  }
}

调用登录功能时

signIn(user: User) { const body = JSON.stringify(user);
      headers: new HttpHeaders({"Content-Type": "application/json"})
      return this.http.post("http://localhost:3000/users/login", body, httpOption)

     .pipe(map((response) => {
          let test = new AIPResponse().fromJSON(response);
          localStorage.setItem("token", test.token);
          localStorage.setItem("userId", test.message);
  }))
     .pipe(catchError((error) => throwError(error)));
  }

希望获得帮助!