Nest.js:全局 AuthGuard 但有例外
Nest.js: Global AuthGuard but with exceptions
我想注册我的 AuthenticationGuard,它在我的应用程序中全局检查身份验证,以便默认情况下所有路由都需要身份验证。
const authGuard = app
.select(AuthModule)
.get(AuthGuard);
app.useGlobalGuards(authGuard);
best/nest.js添加路由异常的方法是什么,这样匿名路由也可以实现?
无法以简洁的方式配置此类行为。如果使用 useGlobalGuards
,唯一的方法是自定义或扩展 AuthGuard
。
您实际上可以为全局 AuthGuard
设置元数据,以便它可以确定是否应该允许未经授权的请求。
例如
设置全局授权保护
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 {}
使用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);
}
}
我想注册我的 AuthenticationGuard,它在我的应用程序中全局检查身份验证,以便默认情况下所有路由都需要身份验证。
const authGuard = app
.select(AuthModule)
.get(AuthGuard);
app.useGlobalGuards(authGuard);
best/nest.js添加路由异常的方法是什么,这样匿名路由也可以实现?
无法以简洁的方式配置此类行为。如果使用 useGlobalGuards
,唯一的方法是自定义或扩展 AuthGuard
。
您实际上可以为全局 AuthGuard
设置元数据,以便它可以确定是否应该允许未经授权的请求。
例如
设置全局授权保护
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 {}
使用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);
}
}