Правильное использование темы воспроизведения в потоке аутентификации - PullRequest
0 голосов
/ 10 апреля 2019

Я хотел бы добавить аутентификацию для компонента посадки.Я изо всех сил пытаюсь понять поток между auth guard и auth service.Моя служба аутентификации выполняет http-запрос к моему серверу, чтобы проверить, вошел ли пользователь в систему. Пока я превращаю этот запрос в субъект поведения, он всегда отправляет начальное значение false для сторожевого устройства.Как создать тему воспроизведения, чтобы справиться с этим?У меня есть некоторый код, составленный из множества поисковиков, но я не уверен, как он работает, или это правильно.

Я пробовал тему поведения.Только возвращающие логические значения из canActivate.

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


  constructor(private authService: AuthService, private router: Router) { }


  canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> {

    return this.authService.isLoggedIn()
      .pipe(
      map(x => { if (!x) return false } ),
      catchError => Observable.create(false)
      );
  }
}

Прошу прощения за любые ужасы, я нахожу библиотеку rxjs трудной для изучения.


    export class AuthService {

    private authenticatedUser;

    constructor(private http: HttpClient) { }



    isLoggedIn(): Observable<boolean> {

    let subject = new ReplaySubject<boolean>();

    if (!this.authenticatedUser) {

      this.http.get('/api/current_user').subscribe(res => {

        console.log("next: returning true");

        this.authenticatedUser = res;

        subject.next(true);

      }, (err) => {
        console.error("next: returning false");
        subject.next(false);
      });
    }

    return subject.asObservable()
  }

  }

Я не использую локальное хранилище.Многие из примеров, которые я вижу, используют это.Конечно, это здорово, потому что это синхронное действие.Мой поток должен начинаться с запроса к моему серверу.

Есть мысли или указатели?Каким должен быть поток?Является ли тема воспроизведения лучшим подходом?В любом случае, я мог бы хранить там объект User?

любая помощь очень ценится,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...