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

第五步:解决跨域问题,返回 token,校验token, 并定义将接收的参数全局存储的方法

文章目录

  • 1 解决跨域问题
    • 1.1 将`cros`挂到全局中间件上
  • 2 生成token,校验token
    • 2.1 生成token
    • 2.2 创建token配置文件
    • 2.3 引入并配置生成token规则, 并挂载到全局中间件
  • 3 测试效果
    • 3.1 生成token接口
    • 3.2 不传token
    • 3.3 传token
  • 4 token失败错误/token过期

  • 注:不要关心注释代码,那是属于后面功能的区域。因为随着代码体量加大,功能不再明确,只需按照步骤并参考效果图,把关键代码写入即可,所以下只写关键代码,具体请看效果图。
    项目地址

1 解决跨域问题

npm i cors

1.1 将cros挂到全局中间件上

/src/app.module.tsimport { Module, MiddlewareConsumer, NestModule } from '@nestjs/common';
// 跨域 
import * as cors from 'cors';// 定义中间件
export class AppModule implements NestModule {configure(consumer: MiddlewareConsumer) {consumer// 解决跨域的问题的全局中间件.apply(cors()).forRoutes('*')// 验证token的全局中间件// .apply(JwtExpiredMiddleware).forRoutes('*')}
}

效果图

2 生成token,校验token

2.1 生成token

// 生成token https://docs.nestjs.cn/9/security?id=jwt-%e5%8a%9f%e8%83%bd
import { JwtService } from '@nestjs/jwt';// Swagger标签@ApiTags('有Swagger文档/开启请求参数校验/Token')// 请求方式:Post, 请求路径:/user-copy/queryToken@Post('queryToken')// @Body() 装饰器async queryToken(@Body() body: userResponsesValidator) {// 存储参数到全局this.globalParamsService.setParam('globalToken', body);return {// 对参数进行签名  生成token -- 正常来说肯定是要去库里查这个账号存不存在的 -- 由于是示例代码  就不写那么麻烦了 -- 不然忘了账号又得再注册一个access_token: this.jwtService.sign({ user_name: body.user_name, password: body.password }),};}

效果图

2.2 创建token配置文件

npm i @nestjs/jwt jsonwebtoken
/src/utils/tokenConfig.tsimport { Injectable, NestMiddleware } from '@nestjs/common';
import { Request, Response, NextFunction } from 'express';
// npm i jsonwebtoken
import * as jwt from 'jsonwebtoken';interface JwtPayload {exp: number;// 其他 JWT 载荷属性
}// 定义token的签名与超时时间
export const toeknData = {secret: "tokenKey", // 密匙expiresIn:"60s", // 超时时间60秒
}@Injectable()
export class JwtExpiredMiddleware implements NestMiddleware {use(req: Request, res: Response, next: NextFunction) {// 一般来说 可能会以正则去匹配白名单接口 - 大部分情况下,只会有极个别的接口会是白名单 - 由于是示例 就直接写死了// 如果 请求地址不为 /user-copy/findValidatorToken 则直接跳过if (req.baseUrl !== '/user-copy/findValidatorToken') return next()const token = req.headers.authorization?.split(' ')[1]; // 从请求头中获取 JWTif (token) {try {// 解码const decoded = jwt.verify(token, toeknData.secret) as JwtPayload;// 接收到JWT后执行的逻辑// 当前时间戳// const currentTime = Math.floor(Date.now() / 1000);// decoded.exp 是解码后的 JWT 中的过期时间,表示该令牌的有效期截止时间。// decoded.iat 是解码后的 JWT 中的签发时间,表示该令牌的生成时间。// 比较当前时间是否已经超出令牌有效期截至时间// if (decoded.exp < currentTime) {//   // JWT 已经超时//   // 执行相应的逻辑//   return res.send({ status: 99998, data: [], message: '登录超时' });// }} catch (error) {// JWT 验证失败// 执行相应的逻辑return res.send({ status: 99998, data: error, message: '认证失败' });}} else {// token认证失败// 执行相应的逻辑return res.send({ status: 99999, data: 'token in required', message: '认证失败' });}next();}}

2.3 引入并配置生成token规则, 并挂载到全局中间件

/src/app.module.ts// npm i @nestjs/jwt
// 生成token https://docs.nestjs.cn/9/security?id=jwt-%e5%8a%9f%e8%83%bd
import { JwtModule } from '@nestjs/jwt';
import { toeknData, JwtExpiredMiddleware } from './utils/tokenConfig'// 配置生成的tokenimports: [JwtModule.register({secret: toeknData.secret, // 是用于签名和验证 JWT 的密钥signOptions: { expiresIn: toeknData.expiresIn }, // JWT 的过期时间。}),]// 定义中间件
export class AppModule implements NestModule {configure(consumer: MiddlewareConsumer) {consumer// 解决跨域的问题的全局中间件.apply(cors()).forRoutes('*')// 验证token的全局中间件.apply(JwtExpiredMiddleware).forRoutes('*')}
}

效果图

3 测试效果

3.1 生成token接口

效果图

3.2 不传token

效果图

3.3 传token

效果图

4 token失败错误/token过期

效果图

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

相关文章:

  • 福建城建设厅官方网站秦皇岛信息平台
  • 云主机做网站网页制作软件ai
  • 网站建设科目做网站维护价格
  • 猎头公司应坚持的原则有seo推广公司网站模板
  • 营销型网站用什么模版合适陈幼坚设计公司官网
  • 工作室网站源码php学网页设计哪个培训学校好
  • seo网站设计就业前景wordpress sydney
  • 宝应做网站汕头小程序开发
  • 沈阳做网站公司哪家好网站开发遵循的原则
  • 网站被降权重新做网站郑州专业网站建设公司详情
  • 网站开发维护任职要求宝安中心地铁站是几号线
  • 网站运营难做嘛禅城网站建设多少钱
  • 可以盗链图片的网站重庆大型的网站建设
  • day05-问答系统
  • 永久免费的wap建站平台泉州优化公司
  • 设计网站的一般过程网站入侵怎么做
  • 网站统计排名WordPress批量修改文章
  • 红色大气网络公司企业网站源码_适合广告设计用divid做网站代码
  • 湖南建设厅网站证书查询做快三网站
  • 陕西交通建设集团信息网站做翻译兼职的网站是哪个
  • 网站建设丷金手指专业十五网上智慧团建官网
  • 网站建设 软件有哪些方面wordpress文章内多页面
  • 南京网站销售网上注册公司的网址
  • 简单的seo网站优化排名aspnet网站开发
  • 崇明建设小学网站福建省鑫通建设有限公司网站
  • 锐途网站建设写作网站投稿赚钱
  • 做个电商网站和app网站禁止右键
  • 浙江建设厅网站首页新企业名录数据免费
  • wordpress 自动链接seo项目
  • 如何逐步提升网站权重哪里有网站建设服务