Angular HttpClient Post с AuthGuard не работает - PullRequest
0 голосов
/ 26 февраля 2019

у меня следующая проблема;Наблюдаемое всегда возвращает неопределенное.Я думаю, что я действительно не понимаю, как мне нужно использовать HttpClient для работы с AuthGuard.

canActivate(
  next: ActivatedRouteSnapshot,
  state: RouterStateSnapshot): Observable < boolean > {
  var bool
  var token = localStorage.getItem('Authorization');
  if (token != null) {
    this.http.post('http://localhost:5000/v1/logstatus?token=' + token, this.authData).subscribe(res => {
      if (!JSON.stringify(res).includes('AuthorizationNotFound')) {
        bool = true
      } else {
        bool = false
      }
    })
  } else {
    bool = false
  }
  console.log(bool)
  return observableOf(bool)
}

1 Ответ

0 голосов
/ 26 февраля 2019

this.http.post - это асинхронное действие, поэтому вы возвращаете of(bool) до того, как bool будет определено результатом.Перефразируя, of(bool) разрешается до того, как POST завершается, и устанавливает значение bool.

Вместо этого вы можете map ответ, наблюдаемый для логического значения, и возвращать его напрямую.Измените свой if блок на:

if (token != null) {
  return this.http.post('http://localhost:5000/v1/logstatus?token=' + token, this.authData)
             .map(res => !JSON.stringify(res).includes('AuthorizationNotFound'));
}

Это сделает наблюдаемую карту POST напрямую с логическим значением, которое вы ищете.

Не связано, но если вы еще этого не сделали, вам следуетрассмотрите возможность добавления логики обработки ошибок к этому вызову, потому что если вызов POST завершится неудачно, ваша защита сломается.

...