以下是一个使用Angular路由的示例,当用户注销时,自动离开受保护的区域并重新激活canActivate守卫。
首先,您需要设置一个AuthGuard来保护您的路由。AuthGuard将检查用户是否已登录,如果未登录,则导航到登录页面。
import { Injectable } from '@angular/core';
import { CanActivate, Router } from '@angular/router';
@Injectable({
providedIn: 'root'
})
export class AuthGuard implements CanActivate {
constructor(private router: Router) {}
canActivate(): boolean {
if (/* 检查用户是否已登录 */) {
return true;
} else {
this.router.navigate(['/login']);
return false;
}
}
}
接下来,您需要设置一个LoginComponent来处理用户登录。
import { Component } from '@angular/core';
@Component({
selector: 'app-login',
template: `
Login
`
})
export class LoginComponent {
// 处理用户登录逻辑
}
在你的路由模块中,你可以使用AuthGuard来保护需要登录才能访问的路由。
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { AuthGuard } from './auth.guard';
import { LoginComponent } from './login.component';
import { ProtectedComponent } from './protected.component';
const routes: Routes = [
{ path: 'login', component: LoginComponent },
{ path: 'protected', component: ProtectedComponent, canActivate: [AuthGuard] },
// 其他路由
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppRoutingModule { }
最后,您需要在ProtectedComponent中触发注销操作。
import { Component } from '@angular/core';
import { Router } from '@angular/router';
@Component({
selector: 'app-protected',
template: `
Protected Area
`
})
export class ProtectedComponent {
constructor(private router: Router) {}
logout() {
// 处理用户注销逻辑
this.router.navigate(['/login']);
}
}
这样,当用户点击注销按钮时,将触发注销操作并导航到登录页面。在导航到受保护的区域时,AuthGuard将重新激活并检查用户是否已登录。