Свойство 'token' не существует для типа 'Promise <any>' - PullRequest
0 голосов
/ 15 мая 2018

Я хочу обработать токен. Но получите сообщение:

Свойство 'token' не существует для типа 'Promise'

У меня есть следующий код. Я получаю 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 голосов
/ 01 сентября 2018

Почему бы вам не использовать Serializable class.

Это мое решение этой проблемы, ссылаясь на: Angular2 HTTP GET - приведение ответа к полному объекту

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)));
  }

Надеюсь на эту помощь !!!

...