在Angular 12中,出现了一个问题,即初始化程序会在应用启动时运行,但它无法正确地检查是否已登录。
解决这个问题的最简单方法是在应用程序启动时手动进行身份验证。您可以使用Angular的Auth服务和AuthGuard来实现这个目标。下面是一个示例代码:
@Injectable() export class AuthGuard implements CanActivate {
constructor(private auth: AuthService, private router: Router) {}
canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean { if (this.auth.isAuthenticated()) { return true; }
this.router.navigate(['/login']);
return false;
} }
@Injectable() export class AuthService {
private loggedIn = false;
constructor(private http: HttpClient) {}
login(credentials) { return this.http.post('/api/login', credentials, {responseType: 'text'}).pipe( map((response) => { this.loggedIn = true; return response; }) ); }
logout() { this.loggedIn = false; }
isAuthenticated() { return this.loggedIn; } }
在此示例中,我们创建了一个AuthGuard服务和一个AuthService服务。AuthGuard服务实现了CanActivate接口,并检查是否存在身份验证。AuthService服务实现了身份验证逻辑,并提供了isAuthenticated()函数,该函数会返回是否已登录的布尔值。
要使用该AuthGuard服务,请将其添加到您希望需要身份验证的路由中。例如:
const routes: Routes = [ { path: '', component: HomeComponent, canActivate: [AuthGuard] }, { path: 'login', component: LoginComponent }, { path: 'dashboard', component: DashboardComponent, canActivate: [AuthGuard] }, { path: '**', component: PageNotFoundComponent } ];
通过添加canActivate: [AuthGuard]选项,AuthGuard服务将在路由激活之前自动运行。
请注意,此解决方法仅适用于需要身份验证的应用程序。如果您的应用程序不需要身份验证,则可以忽略此提示。
上一篇:Angular12-尝试从三个函数中加载数据到一个图表中,但是在其他方法完成之前调用了图表方法。
下一篇:Angular12-CORS拦截了我的请求:请求的资源中没有“Access-Control-Allow-Origin”标题。