nestjs 开发手册安装bash自动换行复制npm i -g @nestjs/cli 创建项目bash自动换行复制nest new <project-name> nestjs 开发依赖orm - prismabash自动换行复制pnpm add prisma-binding @prisma/client bash自动换行复制pnpm add -D prisma mock 数据bash自动换行复制pnpm add mockjs bash自动换行复制pnpm add -D @types/mockjs 配置文件bash自动换行复制pnpm add @nestjs/config 校验bash自动换行复制pnpm add class-validator class-transformer 密码加密bcrypt 依赖 python 环境bash自动换行复制pnpm add bcrypt 或者下载 bcryptjsbash自动换行复制pnpm add bcryptjs bash自动换行复制pnpm add -D @types/bcryptjs bcrypt 使用使用 bcrypt 加密密码ts自动换行复制import { hashSync } from "bcryptjs" // hasnSync(要散列的值,加密等级) // val ? hashSync(val) : val; // 对比密码是否一致 jwtbash自动换行复制pnpm add @nestjs/jwt .env自动换行复制SECRET = 22222 ts自动换行复制import { JwtModule } from '@nestjs/jwt' @Global() @Module({ imports: [JwtModule.registerAsync({ useFactory() { return { secret: process.env.SECRET, } } })], providers: [], exports: [JwtModule] }) export class JwtModule {} passport 验证安装依赖bash自动换行复制pnpm add @nestjs/passport passport passport-local passport-jwt bash自动换行复制pnpm add -D @types/passport @types/passport-local @types/passport-jwt 使用进行登录时的校验并颁发 tokents自动换行复制import { PassportStrategy } from "@nestjs/passport" import { compareSync } from "bcryptjs" import { IStrategyOptions, Strategy } from "passport-local" export class LocalStrategy extends PassportStrategy(Strategy, "local") { // local为策略的名称,默认为passport-local ,-后面的local。可以自定义名称,自定义名称后,使用AuthGuard需要指定对应的名称 constructor(@InjectModel(User) private userModel: ReturnModelType<typeof User>) { super({ usernameField: "username", passwordField: "password", } as IStrategyOptions) } // 策略执行 async validate(username: string, password: string) { const user = await this.userModel.findOne({ username }).select("password") // 用户不存在 if (!user) { throw new BadRequestException("用户名不正确") } // 密码不存在 if (!compareSync(password, user.password)) { throw new BadRequestException("密码错误") } return user } } 30 行ts自动换行复制import { PassportStrategy } from "@nestjs/passport" import { compareSync } from "bcryptjs" import { ExtractJwt, Strategy, StrategyOptions } from "passport-jwt" export class LocalStrategy extends PassportStrategy(Strategy, "jwt") { // jwt为策略的名称,默认为passport-jwt ,-后面的jwt。可以自定义名称,自定义名称后,使用AuthGuard需要指定对应的名称 constructor(@InjectModel(User) private userModel: ReturnModelType<typeof User>) { super({ jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(), secretOrKey: process.env.SECRET, } as StrategyOptions) } // 策略执行 async validate(id) { return await this.userModel.findById(id) } } 19 行ts自动换行复制export class LoginDto { username: string password: string } ts自动换行复制import { Module } from "@nestjs/common" import { PassportModule } from "@nestjs/passport" import { AuthController } from "./auth.controller" import { JwtStrategy } from "./jwt.strategy" import { LocalStrategy } from "./local.strategy" @Module({ imports: [PassportModule], controllers: [AuthController], providers: [LocalStrategy, JwtStrategy], }) export class AuthModule {} ts自动换行复制import { Post, UseGuards } from "@nestjs/common" import { AuthGuard } from "@nestjs/passport" import { LoginDto } from "./login.dto.ts" import { JwtService } from "/jwt.module" export class AuthController { constructor(private jwtService: JwtService) {} @Post("login") @UseGuards(AuthGuard("local")) async login(@Body() dto: LoginDto, @Req() req) { return { token: this.jwtService.sign(String(req.user._id)), } } @Post("user") @UseGuards(AuthGuard("jwt")) async user(@Req() req) { return req.user } } 21 行token 颁发bash自动换行复制日期处理bash自动换行复制pnpm add dayjs swagger 集成bash自动换行复制pnpm add bash自动换行复制pnpm add prisma-binding @prisma/client mockjs @nestjs/config class-validator class-transformer argon2 @nestjs/passport passport passport-local @nestjs/jwt passport-jwt lodash multer dayjs express redis @nestjs/throttler bash自动换行复制pnpm add -D prisma typescript @types/node @types/mockjs @nestjs/mapped-types @types/passport-local @types/passport-jwt @types/express @types/lodash @types/multer @types/node
评论区
评论加载中...