88 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
			
		
		
	
	
			88 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
<?php
 | 
						|
 | 
						|
namespace Modules\Auth\Components;
 | 
						|
 | 
						|
use Illuminate\Auth\Events\PasswordReset;
 | 
						|
use Illuminate\Support\Str;
 | 
						|
use Illuminate\Support\Facades\Hash;
 | 
						|
use Illuminate\Support\Facades\Password;
 | 
						|
use Illuminate\Validation\Rules\Password as PasswordRule;
 | 
						|
use Illuminate\Validation\ValidationException;
 | 
						|
use Livewire\Attributes\Layout;
 | 
						|
use Livewire\Component;
 | 
						|
 | 
						|
class PasswordResetConfirm extends Component
 | 
						|
{
 | 
						|
 | 
						|
    public string $password = '';
 | 
						|
    public string $password_confirmation = '';
 | 
						|
    public string $token = '';
 | 
						|
    public string $email = '';
 | 
						|
 | 
						|
    public function mount(string $token): void
 | 
						|
    {
 | 
						|
        $this->email = request()->query('email');
 | 
						|
        $this->token = $token;
 | 
						|
    }
 | 
						|
 | 
						|
    public function submit()
 | 
						|
    {
 | 
						|
        $this->validate([
 | 
						|
            'token' => 'required',
 | 
						|
            'email' => 'required|email',
 | 
						|
            'password' => ['required', 'confirmed', PasswordRule::defaults()],
 | 
						|
        ]);
 | 
						|
 | 
						|
        $response = Password::broker()->reset([
 | 
						|
            'email' => $this->email,
 | 
						|
            'password' => $this->password,
 | 
						|
            'password_confirmation' => $this->password_confirmation,
 | 
						|
            'token' => $this->token
 | 
						|
        ], fn ($user, $password) => $this->resetPassword($user, $password));
 | 
						|
 | 
						|
        if ($response == Password::PASSWORD_RESET) {
 | 
						|
            $this->dispatch('success', 'Passwort erfolgreich geändert.');
 | 
						|
            return redirect()->route('home');
 | 
						|
        }
 | 
						|
 | 
						|
        ValidationException::withMessages([
 | 
						|
            'password' => 'Passwort konnte nicht geändert werden.',
 | 
						|
        ]);
 | 
						|
    }
 | 
						|
 | 
						|
    protected function resetPassword($user, $password)
 | 
						|
    {
 | 
						|
        $user->password = Hash::make($password);
 | 
						|
        $user->setRememberToken(Str::random(60));
 | 
						|
        $user->save();
 | 
						|
        event(new PasswordReset($user));
 | 
						|
        auth()->login($user);
 | 
						|
    }
 | 
						|
 | 
						|
    #[Layout('components.layouts.full')]
 | 
						|
    public function render(): string
 | 
						|
    {
 | 
						|
        return <<<'HTML'
 | 
						|
            <x-page::full heading="Passwort vergessen" title="Passwort vergessen">
 | 
						|
                <form wire:submit.prevent="submit">
 | 
						|
                    <div class="grid gap-5">
 | 
						|
                        <span class="text-gray-500 text-sm">
 | 
						|
                            Hier kannst du dein Passwort zurücksetzen.<br />
 | 
						|
                            Gebe dafür ein neues Passwort ein.<br />
 | 
						|
                            Merke oder notiere dir dieses Passwort, bevor du das Formular absendest.<br />
 | 
						|
                            Danach wirst du zum Dashboard weitergeleitet.
 | 
						|
                        </span>
 | 
						|
 | 
						|
                        <x-form::text type="password" name="password" wire:model="password" label="Neues Passwort"></x-form::text>
 | 
						|
                        <x-form::text type="password" name="password_confirmation" wire:model="password_confirmation" label="Neues Passwort widerholen"></x-form::text>
 | 
						|
                        <x-ui::button type="submit">Passwort zurücksetzen</x-ui::button>
 | 
						|
                        <div class="flex justify-center">
 | 
						|
                            <a href="/login" class="text-gray-500 text-sm hover:text-gray-300">Zurück zum Login</a>
 | 
						|
                        </div>
 | 
						|
                    </div>
 | 
						|
                </form>
 | 
						|
            </x-page::full>
 | 
						|
        HTML;
 | 
						|
    }
 | 
						|
}
 |