likes
comments
collection
share

【NestJS学习笔记】 之 守卫

作者站长头像
站长
· 阅读数 41

前言,小编最近在学习NestJS系列相关知识,想把自己了解到的知识点作为笔记的同时也分享给大家,本篇涉及的是与守卫相关的知识,如果有哪里写的不好的话还恳请各位掘友批评指正谢谢,小编将不胜感激,闲话不多说,我们直接步入正题吧...

守卫(Guard)

在 NestJS 中,守卫(Guards)是一种用于处理身份验证和授权的机制。它们是一种特殊的类,实现了 CanActivate 接口,主要用于确定请求是否应该由路由处理程序处理。守卫在每个中间件之后执行,但在任何拦截器或管道之前执行。

【NestJS学习笔记】 之 守卫

以下是关于 NestJS 守卫的关键点:

  1. 主要功能:

    • 身份验证:确定用户是否已登录或有效(即登录信息是否过期)。
    • 授权:检查用户是否有权限执行特定操作。
  2. 工作原理:

    • 守卫可以访问 ExecutionContext 实例,因此可以了解当前请求的详细信息。
    • 它们返回一个布尔值,指示是否允许当前请求继续。
  3. 使用场景:

    • 保护路由或控制器
    • 实现基于角色的访问控制
    • 验证 JWT 令牌
    • 检查用户权限

创建守卫

// 1. 使用 nest -h 查看命令
    nest -h
    
// 2. 生成一个完整的资源。资源通常包括控制器、服务、模块等相关文件。
    nest g res guard //guard为资源名称
    
// 3. 创建一个守卫,名称为guard
    nest g gu guard

【NestJS学习笔记】 之 守卫

【NestJS学习笔记】 之 守卫

【NestJS学习笔记】 之 守卫

守卫要求实现函数canActivate ,并给定参数context执行上下文 要求返回一个布尔值

【NestJS学习笔记】 之 守卫

使用守卫(通过 UseGuards 装饰器)

在 Controller 中使用守卫:

【NestJS学习笔记】 之 守卫

【NestJS学习笔记】 之 守卫

【NestJS学习笔记】 之 守卫

实现全局守卫:

【NestJS学习笔记】 之 守卫

 实现针对不同角色控制守卫(鉴权)

guard  使用  Reflector 反射读取 setMetaData的值去做判断这边例子是从url 判断有没有admin权限

【NestJS学习笔记】 之 守卫

借助 SetMetadata 装饰器,第一个参数为key,第二个参数自定义我们的例子是数组存放的权限

【NestJS学习笔记】 之 守卫

鉴权成功时

【NestJS学习笔记】 之 守卫

鉴权失败时

【NestJS学习笔记】 之 守卫

注意:上面的 SetMetadata 传入的第一个参数的名称可以自定义,但是要与守卫中,也就是上面实现了 CanActivate 类的 GuardGuard 中的 this.reflector 的第一个参数名称要一致才可以让特定的守卫生效

结语:以上就是小编对于NestJS中守卫的知识点的理解,感谢阅读!!!

转载自:https://juejin.cn/post/7390646355028967451
评论
请登录