From 8b20f7019e691661e2e79f83d0cee16517dd23ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=A6=E7=A7=8B=E6=97=AD?= Date: Fri, 17 Feb 2023 15:04:35 +0800 Subject: [PATCH] update need-auth decorator --- src/auth/auth.controller.ts | 6 +----- src/common/decorators/need-auth.decorator.ts | 20 +++++++++++++------- src/common/decorators/skip-auth.decorator.ts | 4 ---- src/common/decorators/token.decorator.ts | 12 ------------ src/common/guards/jwt-auth.guard.ts | 12 ++++++------ 5 files changed, 20 insertions(+), 34 deletions(-) delete mode 100644 src/common/decorators/skip-auth.decorator.ts delete mode 100644 src/common/decorators/token.decorator.ts diff --git a/src/auth/auth.controller.ts b/src/auth/auth.controller.ts index d999831..289bbdb 100644 --- a/src/auth/auth.controller.ts +++ b/src/auth/auth.controller.ts @@ -3,15 +3,11 @@ import { AuthService } from './auth.service' import { CreateUserDto } from 'src/users/dto/create-user.dto' import { ApiTags } from '@nestjs/swagger' import { LoginInputDto } from './dto/login-input.dto' -import { UsersService } from 'src/users/users.service' @ApiTags('Auth') @Controller('api/auth') export class AuthController { - constructor( - private readonly authService: AuthService, - private readonly userService: UsersService, - ) {} + constructor(private readonly authService: AuthService) {} @Post('register') async register(@Body() userData: CreateUserDto) { diff --git a/src/common/decorators/need-auth.decorator.ts b/src/common/decorators/need-auth.decorator.ts index 523c791..73e6a93 100644 --- a/src/common/decorators/need-auth.decorator.ts +++ b/src/common/decorators/need-auth.decorator.ts @@ -1,11 +1,17 @@ -import { applyDecorators, UseGuards } from '@nestjs/common' +import { applyDecorators, UseGuards, SetMetadata } from '@nestjs/common' import { JwtAuthGuard } from '../guards/jwt-auth.guard' import { ApiBearerAuth, ApiUnauthorizedResponse } from '@nestjs/swagger' -export function NeedAuth() { - return applyDecorators( - UseGuards(JwtAuthGuard), - ApiBearerAuth(), - ApiUnauthorizedResponse({ description: 'Unauthorized' }), - ) +export const NEED_AUTH_KEY = 'need-auth' + +export function NeedAuth(needAuth = true) { + if (needAuth) { + return applyDecorators( + SetMetadata(NEED_AUTH_KEY, needAuth), + UseGuards(JwtAuthGuard), + ApiBearerAuth(), + ApiUnauthorizedResponse({ description: 'Unauthorized' }), + ) + } + return new Function() } diff --git a/src/common/decorators/skip-auth.decorator.ts b/src/common/decorators/skip-auth.decorator.ts deleted file mode 100644 index ac6d64c..0000000 --- a/src/common/decorators/skip-auth.decorator.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { SetMetadata } from '@nestjs/common' - -export const SKIP_AUTH_KEY = 'skip-auth' -export const SkipAuth = () => SetMetadata(SKIP_AUTH_KEY, true) diff --git a/src/common/decorators/token.decorator.ts b/src/common/decorators/token.decorator.ts deleted file mode 100644 index 7c7ffdb..0000000 --- a/src/common/decorators/token.decorator.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { createParamDecorator, ExecutionContext } from '@nestjs/common' -import { type Request } from 'express' -import { TokenPayload } from 'src/auth/dto/token.dto' - -export const Token = createParamDecorator( - (key: keyof TokenPayload, ctx: ExecutionContext) => { - const request = ctx.switchToHttp().getRequest() - const token = request.user as TokenPayload - - return key ? token?.[key] : token - }, -) diff --git a/src/common/guards/jwt-auth.guard.ts b/src/common/guards/jwt-auth.guard.ts index 3121df7..f25c40c 100644 --- a/src/common/guards/jwt-auth.guard.ts +++ b/src/common/guards/jwt-auth.guard.ts @@ -6,7 +6,7 @@ import { } from '@nestjs/common' import { AuthGuard } from '@nestjs/passport' import 'rxjs' -import { SKIP_AUTH_KEY } from '../decorators/skip-auth.decorator' +import { NEED_AUTH_KEY } from '../decorators/need-auth.decorator' @Injectable() export class JwtAuthGuard extends AuthGuard('jwt') { @@ -15,14 +15,14 @@ export class JwtAuthGuard extends AuthGuard('jwt') { } canActivate(context: ExecutionContext) { - const skipAuth = this.reflector.getAllAndOverride(SKIP_AUTH_KEY, [ - context.getHandler(), + const needAuth = this.reflector.getAllAndOverride(NEED_AUTH_KEY, [ context.getClass(), + context.getHandler(), ]) - if (skipAuth) { - return true + if (needAuth) { + return super.canActivate(context) } - return super.canActivate(context) + return true } handleRequest(err, user, info) {