在Angular中的授权守卫 9/10/11

在Angular中的授权守卫 9/10/11

AuthGuard用于保护angular中的路由免受未经授权的访问。

AuthGuard如何工作?

Auth guard提供名为canActivate的生命周期事件。canActivate就像一个构造函数。它将在访问路由之前被调用。canActivate必须返回true才能访问该页面。如果它返回false,我们就不能访问该页面。我们可以在canActivate函数中编写我们的用户授权和认证逻辑。

AuthGuard用于保护路由免受未经授权的访问

因此,在这里我们要在angular中创建一个AuthGuard,它将保护我们的路由免受未经授权的访问。

例子:我们可以通过使用CLI运行简单的命令来创建一个AuthGuard。

ng g guard services/auth

上述命令在services文件夹内创建了AuthGuard,AuthGuard的名称是auth。

import { Injectable } from "@angular/core";
import {
    ActivatedRouteSnapshot,
    CanActivate,
    Router,
    RouterStateSnapshot,
    UrlTree
} from "@angular/router";
import { AuthService } from "./auth.service";
  
@Injectable()
export class AuthGuard implements CanActivate {
    constructor(
        private authService: AuthService,
        private router: Router) { }
    canActivate(
        route: ActivatedRouteSnapshot,
        state: RouterStateSnapshot): boolean | Promise<boolean> {
        var isAuthenticated = this.authService.getAuthStatus();
        if (!isAuthenticated) {
            this.router.navigate(['/login']);
        }
        return isAuthenticated;
    }
}

在canActivate函数中,我们正在检查用户是否被认证,”getAuthStatus “方法返回一个布尔值。所以基于这个值,我们从canActivate方法中返回这个值。如果 “getAuthStatus “的返回值意味着用户已被认证,那么我们就允许用户访问该页面,否则我们就将用户导航到登录页面。

然后,我们必须更新我们的路由文件,使哪些路由受到AuthGuard的保护,哪些路由对每个用户都是可访问的。

import { NgModule } from '@angular/core';
import { Routes, RouterModule } 
from '@angular/router';
import { AuthGuard } 
from './services/auth.guards';
import { LoginComponent } 
from './auth/login/login.component';
import { SignupComponent } 
from './auth/signup/signup.component';
import { PostCreateComponent } 
from './posts/post-create/post-create.component';
import { PostListComponent } 
from './posts/post-list/post-list.component';
  
const routes: Routes = [
  { path: '', 
  component: PostListComponent },
  { path: 'create', 
  component: PostCreateComponent, 
  canActivate: [AuthGuard]},
  { path: 'edit', 
  component: PostCreateComponent, 
  canActivate: [AuthGuard] },
  { path: 'login', 
  component: LoginComponent },
  { path: 'signup', 
  component: SignupComponent }
];
  
@NgModule({
  imports: [RouterModule.forRoot(routes)],
  exports: [RouterModule],
  providers: [AuthGuard]
})
  
export class AppRoutingModule { }

在路由数组中,我们为 “创建 “和 “编辑 “路由提供了canActivate:[AuthGuard],因此这两条路由只对通过认证的用户开放,其他路由则对所有用户开放。

{ path: ‘create’, component: PostCreateComponent, canActivate: [AuthGuard]},
{ path: ‘edit’, component: PostCreateComponent, canActivate: [AuthGuard] },

请确保在这个路由文件中导入AuthGuard,并在@NgModule提供者中添加它。

@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule],
providers: [AuthGuard]
})

因此,这就是我们如何在AngularJS中保护路由免受未经授权的访问。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程