我已经实现了能够获取请求并控制页面授权的功能,如果请求错误,我想重定向到登录页面。
public canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
return this.authSer.isAuthenticated().pipe(map((response) => {
console.log('I ma here');
if (response.status === 200) {
return true;
} else {
console.log('Error getting data');
return false;
}
}), catchError((error) => of(false))
);
}
如何从此处路由到登录页面?我正在使用角度6
答案 0 :(得分:0)
我知道这个问题专门针对Angular 6,我只想提一下,从您的警卫到7.1 You can return an UrlTree instead or a boolean,以及Promise
和Observable
等价物,以及将用作自动重定向。因此,在您的情况下:
public canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
return this.authSer.isAuthenticated().pipe(
map((response) => {
console.log('I ma here');
if (response.status === 200) {
return true;
} else {
console.log('Error getting data');
return false;
}
}),
catchError((error) => of(false)),
map(responseOk => {
// Isolate dealing with true/false results since they can come from different opperators
if (!responseOk) {
return this.router.createUrlTree(['path', 'to', 'redirect'])
}
// alternatively, return a different UrlTree if you feel like it would be a good idea
return responseOk
})
);
}
我也强烈建议使用他们的Guide升级到Angular 7。它非常轻松,它将为您提供新功能以及带来大量错误修正。
答案 1 :(得分:0)
这里有重定向到url的示例防护。可能有帮助:
export class AuthGuard implements CanActivate {
constructor(private router: Router, private authService: AuthenticationService) { }
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
if (this.authService.isAuth) {
return true;
}
else {
this.router.navigate([state.url]); // or some other url
}
}}