feat(auth): durcir la création du mot de passe via token
Squash de develop vers master pour intégrer verify-token/create-password avec TTL strict, usage unique atomique et invalidation explicite du token. Made-with: Cursor
This commit is contained in:
@@ -7,6 +7,7 @@ import { RegisterParentCompletDto } from './dto/register-parent-complet.dto';
|
||||
import { RegisterAMCompletDto } from './dto/register-am-complet.dto';
|
||||
import { RegisterAmResponseDto } from './dto/register-am-response.dto';
|
||||
import { ChangePasswordRequiredDto } from './dto/change-password.dto';
|
||||
import { CreatePasswordDto } from './dto/create-password.dto';
|
||||
import { ApiBearerAuth, ApiOperation, ApiQuery, ApiResponse, ApiTags } from '@nestjs/swagger';
|
||||
import { AuthGuard } from 'src/common/guards/auth.guard';
|
||||
import type { Request } from 'express';
|
||||
@@ -109,6 +110,29 @@ export class AuthController {
|
||||
return this.authService.refreshTokens(dto.refresh_token);
|
||||
}
|
||||
|
||||
@Public()
|
||||
@Get('verify-token')
|
||||
@ApiOperation({ summary: 'Vérifier un token de création de mot de passe' })
|
||||
@ApiQuery({ name: 'token', required: true, description: 'Token UUID reçu par email' })
|
||||
@ApiResponse({ status: 200, description: 'Token valide' })
|
||||
@ApiResponse({ status: 404, description: 'Token invalide, expiré, ou déjà utilisé' })
|
||||
async verifyCreatePasswordToken(@Query('token') token: string) {
|
||||
return this.authService.verifyCreatePasswordToken(token);
|
||||
}
|
||||
|
||||
@Public()
|
||||
@Post('create-password')
|
||||
@ApiOperation({ summary: 'Créer le mot de passe initial via token email' })
|
||||
@ApiResponse({ status: 201, description: 'Mot de passe créé avec succès' })
|
||||
@ApiResponse({ status: 400, description: 'Confirmation invalide ou mot de passe invalide' })
|
||||
@ApiResponse({ status: 404, description: 'Token invalide, expiré, ou déjà utilisé' })
|
||||
async createPassword(@Body() dto: CreatePasswordDto) {
|
||||
if (dto.password !== dto.password_confirmation) {
|
||||
throw new BadRequestException('Les mots de passe ne correspondent pas');
|
||||
}
|
||||
return this.authService.createPasswordWithToken(dto.token, dto.password);
|
||||
}
|
||||
|
||||
@Get('me')
|
||||
@UseGuards(AuthGuard)
|
||||
@ApiBearerAuth('access-token')
|
||||
|
||||
Reference in New Issue
Block a user