@Keppp

Как guard должен работать с Observable?

user$ - Observable может быть как null так и объект юзера. В зависимости от этого он должен пускать на страницу или вывести ошибку в консоль, как это правильно обработать?

canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean | UrlTree> {
    return this.authService.user$.pipe(
      map( user => !!user)
    );
  }
  • Вопрос задан
  • 81 просмотр
Пригласить эксперта
Ответы на вопрос 1
syamskoy
@syamskoy
Может лучше сохранять пользовательские данные или авторизационный токен в локалстораж, и проверку делать на его наличие?

canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
    const token = this.authService.getAuthorizationToken();
    if (token) {
      return true;
    }

    // not logged in so redirect to sign-in page with the return url
    this.router.navigate(['/account/sign-in'], { queryParams: { returnUrl: state.url }});
    return false;
  }


Можно рассмотреть ситуацию, если пользователь сам заполнит эти поля фейковыми данными в локалстораже и пройдет на закрытую страницу. То ничего страшного не произойдет, т.к. ушедший запрос на получение данных на этой странице получит 401-ю ошибку от бэкенда (токен то фейковый), а значит хендлер-еррор затирает локалстораж и выкидывает юзера на авторизацию. Т.е. этот способ довольно безопасен.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы