HINT
Guards are executed after each middleware, but before any interceptor or pipe.
守卫在每个中间件之后执行,但在任何拦截器或管道之前执行。
import { Injectable, CanActivate, ExecutionContext } from "@nestjs/common"
import { Observable } from "rxjs"
@Injectable()
export class AuthGuard implements CanActivate {
canActive (
context: ExecutionContext
): boolean | Promise<boolean> | Observable<boolean> {
const request = context.switchToHttp().getRequest()
return validateRequest(request) // 验证请求信息
}
}
import { Injectable, CanActive, ExecutionContext } from "@nestjs/common"
import { Observable } from "rxjs"
@Injectable()
export class RolesGuard implements CanActivate {
canActivate(
context: ExecutionContext
): boolean | Promise<boolean> | Observable(boolean) {
return true
}
}
binding guards
@Controller()
@UseGuards(RolesGuard) // 可以用类 可以用实例
// @UseGuards(new RolesGuard())
export class CatsController{}
// 全局注入守卫
// const app = await NestFactory.create(AppModule);
// app.useGlobalGuards(new RolesGuard()); // 与拦截器一样 不行
import { Module } from "@nestjs/common"
import { APP_GUARD } from "@nestjs/core"
@Module({
providers: [
{
provide: APP_GUARD,
useClass: RolesGuard
}
]
})
export class AppModule {}