Преглед изворни кода

feat: reautenticação por senha para acesso ao Financeiro (#CB017)

Endpoint POST /confirm-password valida a senha do usuário logado
(Hash::check, sem reemitir token) para liberar o módulo Financeiro
por sessão. Inclui ConfirmPasswordRequest e chave de tradução
auth.password_confirmed (pt/en/es).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
ebagabee пре 1 месец
родитељ
комит
4d63e97587

+ 16 - 0
app/Http/Controllers/AuthController.php

@@ -3,6 +3,7 @@
 namespace App\Http\Controllers;
 
 use App\Http\Requests\AuthRequest;
+use App\Http\Requests\ConfirmPasswordRequest;
 use App\Http\Requests\ForgotPasswordRequest;
 use App\Http\Requests\RefreshTokenRequest;
 use App\Http\Requests\ResetPasswordRequest;
@@ -99,6 +100,21 @@ public function resetPassword(ResetPasswordRequest $request): JsonResponse
         return $this->successResponse(message: __('auth.password_reset_success'));
     }
 
+    public function confirmPassword(ConfirmPasswordRequest $request): JsonResponse
+    {
+        $validated = $request->validated();
+
+        $confirmed = $this->authService->confirmPassword(
+            password: $validated["password"],
+        );
+
+        if (!$confirmed) {
+            return $this->errorResponse(message: __("auth.password"), code: 422);
+        }
+
+        return $this->successResponse(message: __("auth.password_confirmed"));
+    }
+
     public function logout(Request $request): JsonResponse
     {
         $this->authService->logout();

+ 15 - 0
app/Http/Requests/ConfirmPasswordRequest.php

@@ -0,0 +1,15 @@
+<?php
+
+namespace App\Http\Requests;
+
+use Illuminate\Foundation\Http\FormRequest;
+
+class ConfirmPasswordRequest extends FormRequest
+{
+    public function rules(): array
+    {
+        return [
+            "password" => "required|string",
+        ];
+    }
+}

+ 12 - 0
app/Services/AuthService.php

@@ -10,6 +10,7 @@
 use Exception;
 use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\DB;
+use Illuminate\Support\Facades\Hash;
 use Illuminate\Support\Facades\Mail;
 use Illuminate\Support\Str;
 
@@ -151,6 +152,17 @@ public function verifyPasswordCode(string $email, string $code): bool
         return true;
     }
 
+    public function confirmPassword(string $password): bool
+    {
+        $user = Auth::user();
+
+        if (!$user) {
+            return false;
+        }
+
+        return Hash::check($password, $user->password);
+    }
+
     public function logout(): void
     {
         $user = Auth::user();

+ 1 - 0
lang/en/auth.php

@@ -26,4 +26,5 @@
     'invalid_code' => 'Invalid or expired code',
     'code_verified' => 'Code verified successfully',
     'password_reset_success' => 'Password reset successfully',
+    'password_confirmed' => 'Password confirmed successfully',
 ];

+ 1 - 0
lang/es/auth.php

@@ -26,4 +26,5 @@
     'invalid_code' => 'Código inválido o expirado',
     'code_verified' => 'Código verificado con éxito',
     'password_reset_success' => 'Contraseña restablecida con éxito',
+    'password_confirmed' => 'Contraseña confirmada con éxito',
 ];

+ 1 - 0
lang/pt/auth.php

@@ -26,4 +26,5 @@
     'invalid_code' => 'Código inválido ou expirado',
     'code_verified' => 'Código verificado com sucesso',
     'password_reset_success' => 'Senha redefinida com sucesso',
+    'password_confirmed' => 'Senha confirmada com sucesso',
 ];

+ 2 - 0
routes/authRoutes/auth.php

@@ -4,3 +4,5 @@
 use App\Http\Controllers\AuthController;
 
 Route::post('/logout', [AuthController::class, 'logout']);
+
+Route::post('/confirm-password', [AuthController::class, 'confirmPassword']);