Помогать canActivate не функционирует, если я возвращаю стоимость внутри subscribe

Я делаю guard в Угловом 7, чтобы проверять, ли он loggeado или не пользователь. Как back, так и просьба функционирует правильно, однако я не могу контролировать это внутри subscribe. Это код, который я разработал

import { Injectable } from '@angular/core';
import { CanActivate, Router } from '@angular/router';
import { LoginService } from '../login.service';
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';
import { StorageService } from '../storage.service';

@Injectable({
  providedIn: 'root'
})
export class AuthGuard implements CanActivate {

  constructor( private _login: LoginService,
               private _router: Router,
               private _session: StorageService) {}

  canActivate(): Observable<boolean> | boolean {

    this._login.isLogged()
    .subscribe(
      // Si la respuesta es un código HTTP 204, entonces está autorizado
      () => true,

      // Si la respuesta es un código HTTP 401 entonces NO está autorizado
      () => {
        this._session.deleteData();
        this._router.navigate(['/login']);
        return false;
      });
  }
}

Проблема - что return .subscribe он не возвращает true или false в canActivate(): Observable<boolean> | boolean я не знаю, как делать, чтобы возвращать этот Booleano

У меня появляется эта ошибка

В function whose declared type is neither 'void' nor 'any' must return в value.

я пробовал до того, чтобы распределять стоимость subscribe в переменную, чтобы делать return в конце canActivate() однако это асинхронная функция а следовательно он заканчивает выполнять код и не ждет ответ, я повторяю, все функционирует превосходно как ответы backend, так и функция isLogged() которая возвращается Observable на который я подписываюсь в guard.

Что я могу делать?

Также я попробовал эту функцию

return this._login.isLogged().pipe( map( (data: any) => {
  if( data.auth ) {
    return true;
  } else {
    this._session.deleteData();
    this._router.navigate(['/login']);
    return false;
  }
})
)

И сейчас уже функционируй только, если есть HTTP 200, я не могу контролировать код 401

12
задан 26.06.2019, 04:56
0 ответов