80 lines
2.3 KiB
PHP
80 lines
2.3 KiB
PHP
<?php
|
|
|
|
namespace App\Livewire\Auth;
|
|
|
|
use App\Models\AuditEvent;
|
|
use Illuminate\Auth\Events\PasswordReset;
|
|
use Illuminate\Support\Facades\Hash;
|
|
use Illuminate\Support\Facades\Password;
|
|
use Illuminate\Support\Str;
|
|
use Illuminate\Validation\Rules\Password as PasswordRule;
|
|
use Illuminate\Validation\ValidationException;
|
|
use Livewire\Attributes\Layout;
|
|
use Livewire\Component;
|
|
|
|
#[Layout('layouts.auth')]
|
|
class ResetPassword extends Component
|
|
{
|
|
public string $token = '';
|
|
|
|
public string $email = '';
|
|
|
|
public string $password = '';
|
|
|
|
public string $password_confirmation = '';
|
|
|
|
public function mount(string $token): void
|
|
{
|
|
$this->token = $token;
|
|
$this->email = (string) request()->query('email', '');
|
|
}
|
|
|
|
/** Consume the emailed reset token and set a new password. */
|
|
public function resetPassword()
|
|
{
|
|
$this->validate([
|
|
'email' => ['required', 'email'],
|
|
'password' => ['required', 'confirmed', PasswordRule::min(6)],
|
|
]);
|
|
|
|
$status = Password::reset(
|
|
[
|
|
'email' => $this->email,
|
|
'password' => $this->password,
|
|
'password_confirmation' => $this->password_confirmation,
|
|
'token' => $this->token,
|
|
],
|
|
function ($user) {
|
|
$user->forceFill([
|
|
'password' => Hash::make($this->password),
|
|
'must_change_password' => false,
|
|
'remember_token' => Str::random(60),
|
|
])->save();
|
|
|
|
AuditEvent::create([
|
|
'user_id' => $user->id,
|
|
'actor' => $user->name ?? 'system',
|
|
'action' => 'password.reset',
|
|
'target' => $user->email,
|
|
'ip' => request()->ip(),
|
|
]);
|
|
|
|
event(new PasswordReset($user));
|
|
},
|
|
);
|
|
|
|
if ($status !== Password::PasswordReset) {
|
|
throw ValidationException::withMessages(['email' => __('auth.reset_token_invalid')]);
|
|
}
|
|
|
|
session()->flash('status', __('auth.reset_done'));
|
|
|
|
return $this->redirect(route('login'), navigate: true);
|
|
}
|
|
|
|
public function render()
|
|
{
|
|
return view('livewire.auth.reset-password')->title(__('auth.title_forgot'));
|
|
}
|
|
}
|