feat: reset password

This commit is contained in:
2026-05-21 21:21:03 +02:00
parent 7f60bc756f
commit 19e65e36f3
9 changed files with 330 additions and 32 deletions
+51 -16
View File
@@ -13,6 +13,7 @@ use App\Models\User;
use Illuminate\Auth\Events\PasswordReset;
use Illuminate\Auth\Events\Verified;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource;
use Illuminate\Support\Arr;
@@ -21,6 +22,7 @@ use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Password;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Str;
use Illuminate\Support\ValidatedInput;
use Illuminate\View\View;
class AuthController extends Controller
@@ -145,22 +147,7 @@ class AuthController extends Controller
public function resetPassword(ResetPasswordRequest $request): JsonResponse
{
$data = $request->validated();
$data['email'] = strtolower($data['email']);
$status = Password::reset(
$data,
function (User $user, string $password): void {
$user->forceFill([
'password' => Hash::make($password),
'remember_token' => Str::random(60),
])->save();
$user->tokens()->delete();
event(new PasswordReset($user));
}
);
$status = $this->resetPasswordFor($request->safe());
if ($status !== Password::PASSWORD_RESET) {
return response()->json([
@@ -173,6 +160,34 @@ class AuthController extends Controller
]);
}
public function showResetPasswordForm(Request $request, string $token): View
{
return view('auth.reset-password', [
'appName' => config('app.name'),
'email' => (string) $request->query('email', ''),
'passwordReset' => false,
'token' => $token,
]);
}
public function resetPasswordFromView(ResetPasswordRequest $request): RedirectResponse|View
{
$status = $this->resetPasswordFor($request->safe());
if ($status !== Password::PASSWORD_RESET) {
return back()
->withInput($request->only('email'))
->withErrors(['email' => __($status)]);
}
return view('auth.reset-password', [
'appName' => config('app.name'),
'email' => strtolower($request->validated('email')),
'passwordReset' => true,
'token' => '',
]);
}
public function logout(): JsonResponse
{
$request = request();
@@ -263,6 +278,26 @@ class AuthController extends Controller
return filled($path) && ! Str::startsWith($path, ['http://', 'https://']);
}
private function resetPasswordFor(ValidatedInput $data): string
{
$credentials = $data->all();
$credentials['email'] = strtolower($credentials['email']);
return Password::reset(
$credentials,
function (User $user, string $password): void {
$user->forceFill([
'password' => Hash::make($password),
'remember_token' => Str::random(60),
])->save();
$user->tokens()->delete();
event(new PasswordReset($user));
}
);
}
/**
* @param array<string, mixed> $data
* @return array<string, mixed>