Skip to content

Commit c8d589b

Browse files
committed
Refactor to use Fortify
1 parent b5e1801 commit c8d589b

File tree

15 files changed

+238
-399
lines changed

15 files changed

+238
-399
lines changed
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?php
2+
3+
namespace App\Actions\Fortify;
4+
5+
use Illuminate\Validation\Rules\Password;
6+
7+
trait PasswordValidationRules
8+
{
9+
/**
10+
* Get the validation rules used to validate passwords.
11+
*
12+
* @return array<int, \Illuminate\Contracts\Validation\Rule|array<mixed>|string>
13+
*/
14+
protected function passwordRules(): array
15+
{
16+
return ['required', 'string', Password::default(), 'confirmed'];
17+
}
18+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?php
2+
3+
namespace App\Actions\Fortify;
4+
5+
use App\Models\User;
6+
use Illuminate\Support\Facades\Validator;
7+
use Laravel\Fortify\Contracts\ResetsUserPasswords;
8+
9+
class ResetUserPassword implements ResetsUserPasswords
10+
{
11+
use PasswordValidationRules;
12+
13+
/**
14+
* Validate and reset the user's forgotten password.
15+
*
16+
* @param array<string, string> $input
17+
*/
18+
public function reset(User $user, array $input): void
19+
{
20+
Validator::make($input, [
21+
'password' => $this->passwordRules(),
22+
])->validate();
23+
24+
$user->forceFill([
25+
'password' => $input['password'],
26+
])->save();
27+
}
28+
}

app/Livewire/Auth/ForgotPassword.php

Lines changed: 0 additions & 27 deletions
This file was deleted.

app/Livewire/Auth/Login.php

Lines changed: 0 additions & 104 deletions
This file was deleted.

app/Livewire/Auth/ResetPassword.php

Lines changed: 0 additions & 75 deletions
This file was deleted.

app/Livewire/Auth/VerifyEmail.php

Lines changed: 0 additions & 39 deletions
This file was deleted.

app/Providers/FortifyServiceProvider.php

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,12 @@
22

33
namespace App\Providers;
44

5+
use App\Actions\Fortify\ResetUserPassword;
56
use Illuminate\Cache\RateLimiting\Limit;
67
use Illuminate\Http\Request;
78
use Illuminate\Support\Facades\RateLimiter;
89
use Illuminate\Support\ServiceProvider;
10+
use Illuminate\Support\Str;
911
use Laravel\Fortify\Fortify;
1012

1113
class FortifyServiceProvider extends ServiceProvider
@@ -23,11 +25,45 @@ public function register(): void
2325
*/
2426
public function boot(): void
2527
{
28+
$this->configureActions();
29+
$this->configureViews();
30+
$this->configureRateLimiting();
31+
}
32+
33+
/**
34+
* Configure Fortify actions.
35+
*/
36+
private function configureActions(): void
37+
{
38+
Fortify::resetUserPasswordsUsing(ResetUserPassword::class);
39+
}
40+
41+
/**
42+
* Configure Fortify views.
43+
*/
44+
private function configureViews(): void
45+
{
46+
Fortify::loginView(fn () => view('livewire.auth.login'));
47+
Fortify::verifyEmailView(fn () => view('livewire.auth.verify-email'));
2648
Fortify::twoFactorChallengeView(fn () => view('livewire.auth.two-factor-challenge'));
2749
Fortify::confirmPasswordView(fn () => view('livewire.auth.confirm-password'));
50+
Fortify::resetPasswordView(fn () => view('livewire.auth.reset-password'));
51+
Fortify::requestPasswordResetLinkView(fn () => view('livewire.auth.forgot-password'));
52+
}
2853

54+
/**
55+
* Configure rate limiting.
56+
*/
57+
private function configureRateLimiting(): void
58+
{
2959
RateLimiter::for('two-factor', function (Request $request) {
3060
return Limit::perMinute(5)->by($request->session()->get('login.id'));
3161
});
62+
63+
RateLimiter::for('login', function (Request $request) {
64+
$throttleKey = Str::transliterate(Str::lower($request->input(Fortify::username())).'|'.$request->ip());
65+
66+
return Limit::perMinute(5)->by($throttleKey);
67+
});
3268
}
3369
}

config/fortify.php

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -145,10 +145,8 @@
145145

146146
'features' => [
147147
// Features::registration(),
148-
// Features::resetPasswords(),
149-
// Features::emailVerification(),
150-
// Features::updateProfileInformation(),
151-
// Features::updatePasswords(),
148+
Features::resetPasswords(),
149+
Features::emailVerification(),
152150
Features::twoFactorAuthentication([
153151
'confirm' => true,
154152
'confirmPassword' => true,

resources/views/components/settings/layout.blade.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<div class="me-10 w-full pb-4 md:w-[220px]">
33
<flux:navlist>
44
<flux:navlist.item :href="route('settings.profile')" wire:navigate>{{ __('Profile') }}</flux:navlist.item>
5-
<flux:navlist.item :href="route('settings.password')" wire:navigate>{{ __('Password') }}</flux:navlist.item>
5+
<flux:navlist.item :href="route('settings.user-password')" wire:navigate>{{ __('Password') }}</flux:navlist.item>
66
@if (Laravel\Fortify\Features::canManageTwoFactorAuthentication())
77
<flux:navlist.item :href="route('two-factor.show')" wire:navigate>{{ __('Two-Factor Auth') }}</flux:navlist.item>
88
@endif

0 commit comments

Comments
 (0)