当前位置: 首页 > news >正文

在nestjs中集成jwt校验

jwt

jwt (json web token) 是 通过json的形式在网络中传输的一种协议。
jwt 的优势在于它可以支持跨端在 小程序或者手机端进行使用。
一般情况下,它包括三部分 header、payload、signature 。
可在工具网站中生成jwt:jwt生成工具

在nestjs中使用jwt

依赖安装:pnpm i @nestjs/jwt passport-jwt passport @nestjs/passport

passport 是一个用于处理认证和授权的 Node.js 模块。jwt这个包只是其中的一种策略,nestjs对其也有一定的封装,所以要使用jwt,这些包都需要安装。

策略设置并完成jwt的验证

import { ExtractJwt, Strategy } from 'passport-jwt';
import { PassportStrategy } from '@nestjs/passport';
import { Injectable } from '@nestjs/common';
import { getServerConfig } from '../config/server.config';
import { ConfigEnum } from '../enum/config.enum';@Injectable()
export class JwtStrategy extends PassportStrategy(Strategy) {constructor() {super({jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),ignoreExpiration: false,secretOrKey: getServerConfig()?.[ConfigEnum.JWT_SECRET] as string,//可以写在环境变量中作为密钥});}async validate(payload: { sub: number; username: string; email: string }) {return { userId: payload.sub, username: payload.username, email: payload.email };}
}

为了便于使用可以进一步封装一个守卫

import { AuthGuard } from '@nestjs/passport';
export class JwtGuard extends AuthGuard('jwt') {constructor() {super();}
}

只需要在需要验证的接口上添加 @UseGuards(JwtGuard) 就可以了,
在使用这个装饰器时要注意生效的顺序,如果多个守卫都生效,那么会按照顺序执行。
如果是用了多个useguards,会从下到上执行。
如果前一个失败了,就不会继续执行后面的守卫。

http://www.dtcms.com/a/545146.html

相关文章:

  • 环球资源网商务网站建设目的自己怎么做网页推广
  • (第三篇)Spring AI 基础入门:PromptTemplate 与对话工程实战(从字符串拼接到底层模板引擎的进阶之路)
  • les做ml网站template是什么意思
  • Node.js环境变量配置实战:安全高效开发指南
  • 了解学习Keepalived双机热备
  • 欧美网站建设教程seo排名优化点击软件有哪些
  • 如何通过网站标题找网站百度做公司网站
  • STL容器string的模拟实现
  • X-AnyLabeling 开启 ultralytics GPU训练模式
  • Linux进程:进程状态
  • 网站建设之婚礼摄影网站设计ppt模板免费下载 素材学生版
  • 用html5做手机网站北京在建项目查询
  • Go语言设计模式:适配器模式详解
  • 电商食品网站建设南宁网红打卡
  • C 文件读写
  • 如何获取npm的认证令牌token
  • freeRTOS学习笔记(十二)--信号量
  • BLIP 系列全解析与深度面经:从视觉语言统一到跨模态对齐的演进
  • TCP 和 UDP 的核心区别:从原理到场景的全面解析
  • 做外贸网站基本流程wordpress d8 4.1
  • Backend - HTTP请求的常用返回类型(asp .net core MVC)
  • 国内最大的网站制作公司免费创建属于自己的网站
  • [人工智能-大模型-103]:模型层 - M个神经元组成的单层神经网络的本质
  • 【面试题】缓存先删后写如何避免窗口期的旧数据写入缓存
  • 扩展名网站最新新闻事件摘抄
  • 网站免费推广方法网站正能量免费推广软件
  • Spring Boot3零基础教程,配置 GraalVM 环境,笔记88
  • TCN-Transformer-LSTM多特征分类预测Matlab实现
  • 进程 线程 协程基本概念和区别 还有内在联系
  • Linux(1)rsyslog(1)基础使用