From 99e742f8406363cd0feea1cba7c4338164f1dcc2 Mon Sep 17 00:00:00 2001 From: sdraris Date: Mon, 22 Sep 2025 10:52:20 +0200 Subject: [PATCH] auth profile added --- src/routes/auth/auth.controller.ts | 41 ++++++++++++++++++++++-------- src/routes/auth/auth.service.ts | 12 +++++---- 2 files changed, 38 insertions(+), 15 deletions(-) diff --git a/src/routes/auth/auth.controller.ts b/src/routes/auth/auth.controller.ts index e6696a9..5e4a56a 100644 --- a/src/routes/auth/auth.controller.ts +++ b/src/routes/auth/auth.controller.ts @@ -1,15 +1,22 @@ -import { Body, Controller, Post, UseGuards } from '@nestjs/common'; +import { Body, Controller, Get, Post, Req, UnauthorizedException, UseGuards } from '@nestjs/common'; import { LoginDto } from '../user/dto/login.dto'; import { AuthService } from './auth.service'; import { Public } from 'src/common/decorators/public.decorator'; import { RegisterDto } from '../user/dto/register.dto'; -import { ApiBearerAuth, ApiOperation, ApiTags } from '@nestjs/swagger'; +import { ApiBearerAuth, ApiOperation, ApiResponse, ApiTags } from '@nestjs/swagger'; import { AuthGuard } from 'src/common/guards/auth.guard'; +import type { Request } from 'express'; +import { UserService } from '../user/user.service'; +import { ProfileResponseDto } from '../user/dto/profile_response.dto'; @ApiTags('Authentification') @Controller('auth') export class AuthController { - constructor(private readonly authService: AuthService) { } + constructor( + private readonly authService: AuthService, + private readonly userService: UserService, + ) { } + @Public() @ApiOperation({ summary: 'Connexion' }) @@ -32,11 +39,25 @@ export class AuthController { return this.authService.refreshTokens(refreshToken); } - // @Get('me') - // @UseGuards(AuthGuard) - // @ApiBearerAuth('access-token') - // @ApiOperation({ summary: "Recuperer le profil de l'utilisateur connecte"}) - // getProfile(@Request() req) { - // return req.user; - // } + @Get('me') + @UseGuards(AuthGuard) + @ApiBearerAuth('access-token') + @ApiOperation({ summary: "Récupérer le profil complet de l'utilisateur connecté" }) + @ApiResponse({ status: 200, type: ProfileResponseDto }) + async getProfile(@Req() req: Request): Promise { + if (!req.user || !req.user.sub) { + throw new UnauthorizedException('Utilisateur non authentifié'); + } + + const user = await this.userService.findOne(req.user.sub); + return { + id: user.id, + email: user.email, + role: user.role, + prenom: user.prenom ?? '', + nom: user.nom ?? '', + statut: user.statut, + }; + } } + diff --git a/src/routes/auth/auth.service.ts b/src/routes/auth/auth.service.ts index 215dd23..406eb78 100644 --- a/src/routes/auth/auth.service.ts +++ b/src/routes/auth/auth.service.ts @@ -24,12 +24,14 @@ export class AuthService { * Génère un access_token et un refresh_token */ async generateTokens(userId: string, email: string, role: RoleType) { - const secret = this.configService.get('jwt.secret'); - const expiresIn = this.configService.get('jwt.expiresIn'); + const accessSecret = this.configService.get('jwt.accessSecret'); + const accessExpiresIn = this.configService.get('jwt.accessExpiresIn'); + const refreshSecret = this.configService.get('jwt.refreshSecret'); + const refreshExpiresIn = this.configService.get('jwt.refreshExpiresIn'); const [accessToken, refreshToken] = await Promise.all([ - this.jwtService.signAsync({ sub: userId, email, role }, { secret, expiresIn }), - this.jwtService.signAsync({ sub: userId }, { secret, expiresIn }), + this.jwtService.signAsync({ sub: userId, email, role }, { secret: accessSecret, expiresIn: accessExpiresIn }), + this.jwtService.signAsync({ sub: userId }, { secret: refreshSecret, expiresIn: refreshExpiresIn }), ]); return { @@ -70,7 +72,7 @@ export class AuthService { async refreshTokens(refreshToken: string) { try { const payload = await this.jwtService.verifyAsync(refreshToken, { - secret: this.configService.get('jwt.refresh_token_secret'), + secret: this.configService.get('jwt.refreshSecret'), }); const user = await this.usersService.findOne(payload.sub);