创建守卫目录

  1. nest g guard guard/auth

创建自定义的守卫

守卫如果没有通过会报403,表示没有权限

  1. import { CanActivate, ExecutionContext, Injectable } from '@nestjs/common';
  2. import { Observable } from 'rxjs';
  3. @Injectable()
  4. export class AuthGuard implements CanActivate {
  5. canActivate(
  6. context: ExecutionContext,
  7. ): boolean | Promise<boolean> | Observable<boolean> {
  8. // console.log(context);
  9. console.log( );
  10. // 守卫请求
  11. const req = context.switchToHttp().getRequest();
  12. // 获取头 传入想要的值
  13. const authorization = req.header('authorization')
  14. if(authorization){
  15. return true;
  16. }
  17. return false;
  18. }
  19. }

单独接口守卫

  1. import { Controller, Get ,UseGuards} from '@nestjs/common';
  2. // 引入自定义的守卫
  3. import {AuthGuard} from '../guard/auth.guard'
  4. export class AutjController {
  5. @Get()
  6. @UseGuards(AuthGuard) // 配置独立接口守卫
  7. index(){
  8. return '前端伪大叔'
  9. }
  10. }

整个文件守卫

  1. import { Controller, Get ,UseGuards} from '@nestjs/common';
  2. // 引入自定义的守卫
  3. import {AuthGuard} from '../guard/auth.guard'
  4. @Controller('autj')
  5. @UseGuards(AuthGuard) // 配置全部方法 - 守卫
  6. export class AutjController {
  7. @Get()
  8. index(){
  9. return '前端伪大叔'
  10. }
  11. }

配置全局守卫

需要在mian.ts中配置全局守卫

  1. import { NestFactory } from '@nestjs/core';
  2. import { AppModule } from './app.module';
  3. // 守卫
  4. import {AuthGuard}from './guard/auth.guard'
  5. async function bootstrap() {
  6. const app = await NestFactory.create<NestExpressApplication>(AppModule);
  7. app.useGlobalGuards(new AuthGuard()) // 配置全局守卫
  8. await app.listen(3000);
  9. }
  10. bootstrap();