文章目录
- 1 解决跨域问题
- 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('*')}
}

2 生成token,校验token
2.1 生成token
import { JwtService } from '@nestjs/jwt';@ApiTags('有Swagger文档/开启请求参数校验/Token')@Post('queryToken')async queryToken(@Body() body: userResponsesValidator) {this.globalParamsService.setParam('globalToken', body);return {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';
import * as jwt from 'jsonwebtoken';interface JwtPayload {exp: number;
}
export const toeknData = {secret: "tokenKey", expiresIn:"60s",
}@Injectable()
export class JwtExpiredMiddleware implements NestMiddleware {use(req: Request, res: Response, next: NextFunction) {if (req.baseUrl !== '/user-copy/findValidatorToken') return next()const token = req.headers.authorization?.split(' ')[1]; if (token) {try {const decoded = jwt.verify(token, toeknData.secret) as JwtPayload;} catch (error) {return res.send({ status: 99998, data: error, message: '认证失败' });}} else {return res.send({ status: 99999, data: 'token in required', message: '认证失败' });}next();}}
2.3 引入并配置生成token规则, 并挂载到全局中间件
~/src/app.module.ts
import { JwtModule } from '@nestjs/jwt';
import { toeknData, JwtExpiredMiddleware } from './utils/tokenConfig'imports: [JwtModule.register({secret: toeknData.secret, signOptions: { expiresIn: toeknData.expiresIn }, }),]
export class AppModule implements NestModule {configure(consumer: MiddlewareConsumer) {consumer.apply(cors()).forRoutes('*').apply(JwtExpiredMiddleware).forRoutes('*')}
}

3 测试效果
3.1 生成token接口

3.2 不传token

3.3 传token

4 token失败错误/token过期
