From cdd7630feb70f67cb68a4fd57d8e3e1edb937be4 Mon Sep 17 00:00:00 2001 From: tone <3341154833@qq.com> Date: Wed, 7 May 2025 14:44:07 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E7=99=BB=E5=87=BA=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tone-page-server/src/auth/auth.controller.ts | 14 +++++++++++++- .../src/user/services/user-session.service.ts | 14 ++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/tone-page-server/src/auth/auth.controller.ts b/tone-page-server/src/auth/auth.controller.ts index c56d86c..ec57249 100644 --- a/tone-page-server/src/auth/auth.controller.ts +++ b/tone-page-server/src/auth/auth.controller.ts @@ -1,12 +1,15 @@ -import { BadRequestException, Body, Controller, Get, Post, Request } from '@nestjs/common'; +import { BadRequestException, Body, Controller, Get, Post, Request, UseGuards } from '@nestjs/common'; import { LoginDto } from './dto/login.dto'; import { AuthService } from './auth.service'; +import { AuthGuard } from '@nestjs/passport'; +import { UserSessionService } from 'src/user/services/user-session.service'; @Controller('auth') export class AuthController { constructor( private readonly authService: AuthService, + private readonly userSessionService: UserSessionService, ) { } @Post('login') @@ -22,4 +25,13 @@ export class AuthController { throw new BadRequestException('服务器错误'); } } + + @UseGuards(AuthGuard('jwt')) + @Get('logout') + async logout(@Request() req) { + const { userId, sessionId } = req.user; + await this.userSessionService.invalidateSession(userId, sessionId); + + return true; + } } diff --git a/tone-page-server/src/user/services/user-session.service.ts b/tone-page-server/src/user/services/user-session.service.ts index 24b33a5..6bc0a70 100644 --- a/tone-page-server/src/user/services/user-session.service.ts +++ b/tone-page-server/src/user/services/user-session.service.ts @@ -30,4 +30,18 @@ export class UserSessionService { return !!session; } + + async invalidateSession(userId: string, sessionId: string): Promise { + const session = await this.userSessionRepository.findOne({ + where: { + userId, + sessionId, + deletedAt: null, + } + }); + + if (session) { + await this.userSessionRepository.softDelete(session.id); + } + } } \ No newline at end of file