Согласно Angular docs, интерфейс CanActivate
предоставляет функцию , которая возвращает логическое значение.Официальный пример показывает, что функция похожа на предикат без побочных эффектов.
Мы хотим запретить пользователю доступ к странице напрямую с URL-адреса.В соответствии с примером из этой статьи и многими другими примерами в сети, включая ответы StackOverflow, можно добавить вызов к маршрутизатору Angular из функции canActivate()
.
Однако я этого не делаюзнать, считается ли это хорошей практикой, поскольку это выглядит как побочный эффект.
@Injectable()
export class AdminGuard implements CanActivate {
constructor(private keycloakService : KeycloakService,
private router: Router) {
}
canActivate(): Observable<boolean> | Promise<boolean> | boolean {
if (this.keycloakService.isAdmin()) {
return true;
}
this.router.navigate(['/']); // HERE
return false;
}
}
Каков рекомендуемый способ перенаправить пользователя с защищенной страницы, если он обращается к ней напрямую с URL-адреса?