Nest.js:全局 AuthGuard 但有例外

2024-01-03

我想注册我的 AuthenticationGuard,它在我的应用程序上全局检查身份验证,以便默认情况下所有路由都需要身份验证。

const authGuard = app
    .select(AuthModule)
    .get(AuthGuard);
app.useGlobalGuards(authGuard);

添加路由例外的 best/nest.js 方法是什么,以便也可以实现匿名路由?


您实际上可以为全局设置元数据AuthGuard因此它可以确定是否应该允许未经授权的请求。

e.g.

设置全局身份验证防护

    import { Module } from '@nestjs/common';
    import { APP_GUARD } from '@nestjs/core';
    import { AuthGuard } from './auth.guard';
    
    @Module({
      providers: [
        {
          provide: APP_GUARD,
          useClass: AuthGuard,
        },
      ],
    })
    export class AppModule {}

Use SetMetadata将数据传递给AuthGuard

    import { SetMetadata } from '@nestjs/common';
    // Convienience Function
    const AllowUnauthorizedRequest = () => SetMetadata('allowUnauthorizedRequest', true);
    @Controller()
    export class AppController {
    
      @Get('my-unauthorized-path')
      @AllowUnauthorizedRequest()
      myHandler () {
        return { unauthorized: true };
      }
    
    }
    

使用传入的数据SetMetadata以确定是否允许未经授权的请求。

    import { CanActivate, ExecutionContext, Injectable } from '@nestjs/common';
    import { Reflector } from '@nestjs/core';
    import { validateRequest } from './validateRequest' // your custom implementation
    
    @Injectable()
    export class AuthGuard implements CanActivate {
    
      constructor(private reflector: Reflector) {}
      canActivate(context: ExecutionContext) {
        const request = context.switchToHttp().getRequest();
        const allowUnauthorizedRequest = this.reflector.get<boolean>('allowUnauthorizedRequest', context.getHandler());
        return allowUnauthorizedRequest || validateRequest(request);
      }
    
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Nest.js:全局 AuthGuard 但有例外 的相关文章

随机推荐