Как обрабатывать ответы от сервера с использованием Observable?

Поясните, пожалуйста, как обрабатывать ответы от сервера с использованием объекта observable?
У меня настроен роутинг и стоит защитник, который проверяет токен на валидность. Это некоторая песочница, разбираюсь что к чему в angular'e. Если допустим я в токен загоню не валидный или вообще 0 например. Как работать в этом случае?

AuthenticationGuard(Проверка токена на валидность)
canActivate(
    next: ActivatedRouteSnapshot,
    state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
      if(localStorage.getItem('Token')){
        let token = localStorage.getItem('Token');
        this.authService.verifyToken(token)
                        .subscribe(res => {
                          if(res['token'] == token){
                            this.router.navigate(['/login']);
                          }
                        });
        return true
      } else {
        this.router.navigate(["/login"]);
      }
  }


AuthService
backendUrl = "http://127.0.0.1:8000/";
  constructor(private http: Http,
              private router: Router) { }

  verifyToken(token: string): Observable<{}>{
    let urlVerify = 'api-token-verify'
    let headers = new Headers({'Content-Type':'application/json'});
    let options = new RequestOptions({headers: headers});
    return this.http.post(this.backendUrl+'api-token-verify/', {token}, options)
      .map((response: Response) => response.json())
      .catch(this.handleError);
  }

  handleError(error: any){
    return Observable.throw(error.message || error.json());
  }
  • Вопрос задан
  • 350 просмотров
Решения вопроса 1
Guard в данном случае должен отдавать Observable, или Promise, и реузльтатом должно быть true/false в зависимости от того, успешно прошла проверка или нет.
return this.authService.verifyToken.map(res => res['token'] === token);

Вот тут есть пример: https://stackoverflow.com/questions/38425461/angul...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы