在AuthGuard中加入一个条件语句,判断用户是否已经登录成功,如果登录成功则直接返回true,否则检查是否存在本地存储中的token并使用它来进行登录验证。如果验证成功则设置用户信息并返回true,否则重定向到登录页面。
示例代码:
@Injectable() export class AuthGuard implements CanActivate {
constructor(private authService: AuthService, private router: Router) {}
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean { if (this.authService.isAuthenticated()) { return true; }
const token = localStorage.getItem('token');
if (token && this.authService.validateToken(token)) {
this.authService.setUserFromToken(token);
return true;
}
this.router.navigate(['/login']);
return false;
} }
其中,AuthService是用于处理用户认证逻辑的服务。isAuthenticated()方法检查用户是否已经通过其他途径登录,validateToken(token)方法验证该token是否有效,setUserFromToken(token)方法把token解析成用户信息并存储在服务中。最后,如果用户未登录或者验证失败,则重定向至登录页。