Я использую метод canActivate в охраннике. Внутри у меня есть наблюдаемое, которое возвращает мне объект. У этого объекта есть пароль. Я проверяю пароль, и если он правильный, я хочу, чтобы canActivate возвращал true, если нет, false.
Вот код
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
const uid = route.params.userId;
const hackId = route.params.hackId;
const token = this.authService.token;
const queryParamsPassword = route.queryParams.password;
this.hacksStorageService.fetchHack(token, uid, hackId)
.subscribe(
hack => {
const hackPassword = hack[0].password;
if (queryParamsPassword === hackPassword ) {
return true
} else {
this.router.navigate(["/"]);
return false
}
},
error => {
return false;
}
)
}
Мне сложно понять ответ. Я должен дать ответ, когда это будет сделано. Как только я получу значение из подписки, я хочу вернуть логическое значение в canActivate.
Ошибка, которую я получаю, связана с методом canActivate (красным)
[ts]
Property 'canActivate' in type 'RoleGuard' is not assignable to the same property in base type 'CanActivate'.
Type '(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) => void' is not assignable to type '(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) => boolean | Observable<boolean> | Pr...'.
Type 'void' is not assignable to type 'boolean | Observable<boolean> | Promise<boolean>'.
Я думал, что возвращаюсь в каждую ветку if, так что этого должно быть достаточно, но, видимо, нет. Если я верну подписку, он тоже жалуется.
Любая помощь? Большое спасибо.
canActivate
. Какую версию RXJS вы используете? - person user184994   schedule 14.07.2018