diff --git a/app/Http/Controllers/AuthController.php b/app/Http/Controllers/AuthController.php index 4b10153..0b05df7 100644 --- a/app/Http/Controllers/AuthController.php +++ b/app/Http/Controllers/AuthController.php @@ -4,6 +4,7 @@ namespace App\Http\Controllers; use App\Http\Requests\LoginRequest; use App\Http\Requests\PasswordResetRequest; +use App\Http\Requests\PasswordResetWithTokenRequest; use App\Http\Requests\RegisterRequest; use App\Models\Invitation; use App\Models\Role; @@ -11,6 +12,7 @@ use App\Models\User; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; +use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Password; class AuthController extends Controller @@ -54,6 +56,24 @@ class AuthController extends Controller } public function resetPassword(PasswordResetRequest $request) + { + $user = Auth::user(); + $validatedData = $request->validated(); + + if (! Hash::check($request->current_password, $user->password)) { + return response()->json(['message' => 'Current password is incorrect.'], 422); + } + + try { + $user->forceFill(['password' => $validatedData['password']])->save(); + } catch (\Exception $e) { + return response()->json(['message' => 'Password reset failed.'], 400); + } + + return response()->json(['message' => 'Password reset successful.']); + } + + public function resetPasswordWithToken(PasswordResetWithTokenRequest $request) { $updatedUser = null; diff --git a/app/Http/Requests/PasswordResetRequest.php b/app/Http/Requests/PasswordResetRequest.php index a37f4e1..803ea1c 100644 --- a/app/Http/Requests/PasswordResetRequest.php +++ b/app/Http/Requests/PasswordResetRequest.php @@ -24,8 +24,7 @@ class PasswordResetRequest extends FormRequest return [ 'password' => 'required|string|min:8|confirmed', 'password_confirmation' => 'string', - 'token' => 'required|string', - 'email' => 'required|email|exists:users,email', + 'current_password' => 'required|string', ]; } } diff --git a/app/Http/Requests/PasswordResetWithTokenRequest.php b/app/Http/Requests/PasswordResetWithTokenRequest.php new file mode 100644 index 0000000..9ab9aa4 --- /dev/null +++ b/app/Http/Requests/PasswordResetWithTokenRequest.php @@ -0,0 +1,31 @@ +|string> + */ + public function rules(): array + { + return [ + 'password' => 'required|string|min:8|confirmed', + 'password_confirmation' => 'string', + 'token' => 'required|string', + 'email' => 'required|email|exists:users,email', + ]; + } +} diff --git a/routes/api.php b/routes/api.php index b84e7de..a4e72b7 100644 --- a/routes/api.php +++ b/routes/api.php @@ -11,6 +11,7 @@ use Illuminate\Support\Facades\Route; Route::post('/register', [AuthController::class, 'register'])->name('auth.register'); Route::post('/login', [AuthController::class, 'login'])->name('auth.login'); Route::post('/forgot-password', [AuthController::class, 'forgotPassword'])->name('auth.forgot-password'); +Route::post('/reset-password-token', [AuthController::class, 'resetPasswordWithToken'])->name('auth.reset-password-with-token'); Route::get('/invitations/{token}/accept', [InvitationController::class, 'accept'])->name('invitations.accept'); Route::get('/invitations/{token}/decline', [InvitationController::class, 'decline'])->name('invitations.decline');