Files
2026-06-12 10:11:15 +02:00

99 lines
2.8 KiB
PHP

<?php
declare(strict_types=1);
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Models\User;
use App\Support\Auth\RedirectsUsers;
use Illuminate\Auth\Events\PasswordReset;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Password;
use Illuminate\Support\Str;
use Illuminate\Validation\Rules\Password as PasswordRule;
class ResetPasswordController extends Controller
{
use RedirectsUsers;
/**
* Where to redirect users after resetting their password.
*/
protected string $redirectTo = '/';
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest');
}
public function showLegacyResetForm(Request $request): mixed
{
if ($request->missing('guid')) {
return redirect()->route('password.request')->with('error', 'No reset code provided.');
}
$user = User::findByResetGuid((string) $request->input('guid'));
if ($user === null) {
return redirect()->route('password.request')->with('error', 'Bad reset code provided.');
}
// Check if user is soft deleted
if ($user->trashed()) {
return redirect()->route('password.request')->with('error', 'This account has been deactivated.');
}
$token = Password::broker()->createToken($user);
User::updatePassResetGuid($user->id, null);
return redirect()->route('password.reset', [
'token' => $token,
'email' => $user->email,
]);
}
public function reset(Request $request): mixed
{
$request->validate([
'token' => ['required', 'string'],
'email' => ['required', 'email'],
'password' => ['required', 'confirmed', PasswordRule::defaults()],
]);
$status = Password::broker()->reset(
$request->only('email', 'password', 'password_confirmation', 'token'),
function (User $user, string $password): void {
$user->forceFill([
'password' => Hash::make($password),
'remember_token' => Str::random(60),
'resetguid' => null,
])->save();
event(new PasswordReset($user));
},
);
if ($status === Password::PASSWORD_RESET) {
return redirect()->route('login')->with('success', __($status));
}
return back()
->withInput($request->only('email'))
->withErrors(['email' => __($status)]);
}
public function showResetForm(Request $request, mixed $token = null): mixed
{
return view('auth.passwords.reset')->with([
'token' => $token,
'email' => $request->email,
]);
}
}