nestjs10.x使用jwt生成token

1 安装依赖:

pnpm install --save @nestjs/jwtpnpm install passport passport-jwt @nestjs/jwtpnpm install @types/passport-jwt --save-dev

2 可以使用命令新建auth鉴权文件夹

nest g mo auth  // auth.module.ts
nest g s auth   // auth.service.ts
nest g co auth  //auth.controller.ts

3 在auth.module.ts配置jwt

import { Module } from '@nestjs/common';
import { AuthController } from './auth.controller';
import { AuthService } from './auth.service';
import { UserModule } from '../user/user.module';
import { PassportModule } from '@nestjs/passport';
import { JwtModule } from '@nestjs/jwt';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { JwtStrategy } from './auth.strategy';@Module({imports: [PassportModule,JwtModule.registerAsync({imports: [ConfigModule],useFactory: async (configService: ConfigService) => {return {secret: configService.get('jwt').secret,//jwt密钥signOptions: { expiresIn: '60s' }}},inject: [ConfigService]}),],exports: [JwtModule],controllers: [AuthController],providers: [AuthService,JwtStrategy],
})
export class AuthModule {}

4 其中密钥我通过外部文件引入,也可以使用.env引入

configService.get('jwt').secret,

5. 然后在auth.service.ts中, 生成token,返回给前端

import { HttpException, Injectable } from '@nestjs/common';
import { UserService } from '../user/user.service';
import { JwtService } from '@nestjs/jwt';@Injectable()
export class AuthService {constructor(private userService: UserService,private jwt: JwtService,) {}//登录async manageLogin(username: string, password: string) {const user: ManageUserEntity = await this.userService.findUserName(username);// 生成tokenlet token = await this.jwt.signAsync({username: user.username,id: user.id})return token}}

 6. 验证token, 要在auth中新建auth.strategy.ts

import { Injectable, UnauthorizedException } from "@nestjs/common";
import { PassportStrategy } from "@nestjs/passport";
import { Strategy, ExtractJwt } from "passport-jwt";
import { ConfigService } from '@nestjs/config';/*** JWT策略* */@Injectable()
export class JwtStrategy extends PassportStrategy(Strategy) {//对前端传递来的token进行解析constructor(private configService: ConfigService,) {super({jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),//校验逻辑token 已封装ignoreExpiration: false,secretOrKey: configService.get('jwt').secret,});}/*** 验证token* @param payload*/async validate(payload: any) {return {id: payload.id, username: payload.username}}
}

其中在validate中,会返回已经解析好的用户id和名称。

7. 然后通过路由验证下token

import {UseGuards, Req } from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';@Post('/update')@UseGuards(AuthGuard('jwt'))async saveManage(@Body() dto: CreateManageDto, @Req() req) {console.log(req.user)return '更新成功';}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/729271.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

杠杆和保证金有什么关系?WeTrade众汇一个公式讲清楚

在交易中杠杆其实就是一种期权,它能增加交易者作为抵押品的资金,以建立和维持头寸。 例如,1:100的操作杠杆,在这种情况下,意味着开立1000单位基础货币的头寸,交易者将需要少100倍的资金,即10个…

C++常量和变量

甲流疫情死亡率 甲流并不可怕,在中国,它的死亡率并不是很高。根据截至2009年12月22日各省报告的甲流确诊数和死亡数,计算甲流在各省的死亡率 输入 一行,有两个整数,第1个为确诊数,第2个为死亡数 输出 一…

学习Java的第四天

目录 一、if选择结构 1、基本if选择结构 语法结构: 流程图: 示例: 2、if-else 选择结构 语法结构: 流程图: 示例: 3、多重if选择结构 语法结构: 流程图: 示例&#xff1a…

【Docker】若依ruoyi项目部署

一 搭建局域网 1 # 搭建net-ry局域网,用于部署若依项目docker network create net-ry --subnet172.68.0.0/16 --gateway172.68.0.1 # 注意1:关闭宿主机的防火墙,否者容器内部的MySQL、redis等服务,外部访问不了;开放…

【REST2SQL】12 REST2SQL增加Token生成和验证

【REST2SQL】01RDB关系型数据库REST初设计 【REST2SQL】02 GO连接Oracle数据库 【REST2SQL】03 GO读取JSON文件 【REST2SQL】04 REST2SQL第一版Oracle版实现 【REST2SQL】05 GO 操作 达梦 数据库 【REST2SQL】06 GO 跨包接口重构代码 【REST2SQL】07 GO 操作 Mysql 数据库 【RE…

Docker_搭建跨服务器网络通讯(swarm 集群)

本文目录 一、如何搭建docker的跨服务器网络1、在主服务器上初始化docker swarm 集群2、其他服务器节点加入到创建好的集群中3、检验集群是否搭建成功4、创建overlay类型的docker网络 二、如何部署服务1、docker部署2、docker-compose部署 一、如何搭建docker的跨服务器网络 1…

《小学科学》是什么级别的期刊?是正规期刊吗?能评职称吗?

问题解答: 问:《小学科学》期刊是正规期刊吗? 答:是正规期刊,下面会有具体介绍 问:《小学科学》期刊是什么级别的? 答:省级;主管单位:长春出版传媒集团有…

unicloud 创建云函数并使用云函数

云函数是什么 云函数即在云端(服务器端)运行的函数。 从 HBuilderX 3.4起,新增了云函数的扩展版,云对象。 开发者无需购买、搭建服务器,只需编写代码并部署到云端即可在客户端(App/Web/小程序等&#xf…

【Linux】第一个小程序--进度条

这篇博客要综合利用以前的知识,来实现一个进度条程序~ 目录 换行&回车 缓冲区 实现简单的倒计时 实现进度条 version1 version2 在开始写这个小程序之前,我们先学习一些预备知识: 换行&回车 缓冲区 在我们运行这个程序时&…

如何阅读“计算机界三大神书”之一 ——《计算机程序的构造和解释》SICP

👨‍🎓博主简介 🏅云计算领域优质创作者   🏅华为云开发者社区专家博主   🏅阿里云开发者社区专家博主 💊交流社区:运维交流社区 欢迎大家的加入! 🐋 希望大家多多支…

STM32CubeMX学习笔记17--- FSMC

1.1 TFTLCD简介 TFT-LCD(thin film transistor-liquid crystal display)即薄膜晶体管液晶显示器。液晶显示屏的每一个像素上都设置有一个薄膜晶体管(TFT),每个像素都可以通过点脉冲直接控制,因而每个节点都…

论文阅读:Scalable Diffusion Models with Transformers

Scalable Diffusion Models with Transformers 论文链接 介绍 传统的扩散模型基于一个U-Net骨架,这篇文章提出了一种新的扩散模型结构,将U-Net替换为一个transformer,并将这种结构称为Diffusion Transformers (DiTs)。他们还发现&#xff…

python77-Python的函数参数,个数可变参数

很多编程语言都允许定义个数可变的参数,这样可以在调用函数时传入任意多个参数。Python当然也不例外,Python 允许在形参前面添加一个星号(*),这样就意味着该参数可接收多个参数值,多个参数值被当成元组传入。下面程序定义了一个形参个数可变的函数。 # !/usr/bin/env pyth…

阿里云服务器使用教程_2024建站教程_10分钟网站搭建流程

使用阿里云服务器快速搭建网站教程,先为云服务器安装宝塔面板,然后在宝塔面板上新建站点,阿里云服务器网aliyunfuwuqi.com以搭建WordPress网站博客为例,来详细说下从阿里云服务器CPU内存配置选择、Web环境、域名解析到网站上线全流…

Vscode连接远程服务器失败解决方案

一、 could not establish connection to “XXX” 尝试使用Remote-SSH插件连接远程的服务器,但是配置显示出错,端口显示试图写入的管道不存在,弹出窗口显示could not establish connection to “XXX” 二、检查Windows的OpenSSH 1.检索是否…

Java中注解@RequestParam 和 @ApiParam详解

一、RequestParam 和 ApiParam的常用属性 RequestParam 和 ApiParam 是在 Spring MVC 控制器方法中使用的注解,它们分别服务于不同的目的: RequestParam RequestParam 是 Spring MVC 中用来处理 HTTP 请求参数的注解,主要用于绑定请求中的查…

数据分析项目[开发中]

学习进度记录: 12.7: 教程链接:智能 BI 项目教程(一) (yuque.com) 前端: Ant Design Pro:开始使用 - Ant Design Pro​​​​​​ 然后安装依赖 yarn install 去除不需要的: 移除国际化 【报错】 …

【数据结构与算法】二分查找题解(二)

这里写目录标题 一、81. 搜索旋转排序数组 II二、167. 两数之和 II - 输入有序数组三、441. 排列硬币四、374. 猜数字大小五、367. 有效的完全平方数六、69. x 的平方根 一、81. 搜索旋转排序数组 II 中等 已知存在一个按非降序排列的整数数组 nums ,数组中的值不必…

【Linux】iftop命令详解

目录 一、iftop简介 二、安装iftop命令 2.1 命令查看测试环境系统信息 2.2 查看iftop版本与命令帮助 三、iftop的基本使用 3.1 直接使用iftop命令 3.2 iftop的显示说明 3.3 指定监控某块网卡 3.4 显示某个网段进出封包流量 3.5 按照流量排序 3.6 过滤显示连接 3.7 …

米酒生产加工污水处理需要哪些工艺设备

米酒生产加工过程中产生的污水是一项重要的环境问题,需要采用适当的工艺设备进行处理。下面将介绍一些常用的污水处理工艺设备。 首先,生产过程中的污水需要进行初级处理,常见的设备包括格栅和砂池。格栅用于去除污水中的大颗粒杂质&#xff…