feat: add user authentication with livewire components

This commit is contained in:
jeremy bayse
2026-06-24 06:53:19 +02:00
parent 5b05dfa8c7
commit fa38396479
9 changed files with 368 additions and 11 deletions
+57
View File
@@ -0,0 +1,57 @@
<?php
namespace App\Livewire\Auth;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\RateLimiter;
use Illuminate\Support\Str;
use Illuminate\Validation\ValidationException;
use Livewire\Component;
class Login extends Component
{
public string $email = '';
public string $password = '';
public bool $remember = false;
protected array $rules = [
'email' => 'required|string|email',
'password' => 'required|string',
];
public function login()
{
$this->validate();
$throttleKey = Str::transliterate(Str::lower($this->email).'|'.request()->ip());
if (RateLimiter::tooManyAttempts($throttleKey, 5)) {
$seconds = RateLimiter::availableIn($throttleKey);
throw ValidationException::withMessages([
'email' => trans('auth.throttle', [
'seconds' => $seconds,
'minutes' => ceil($seconds / 60),
]),
]);
}
if (!Auth::attempt(['email' => $this->email, 'password' => $this->password], $this->remember)) {
RateLimiter::hit($throttleKey, 60);
throw ValidationException::withMessages([
'email' => __('auth.failed'),
]);
}
RateLimiter::clear($throttleKey);
session()->regenerate();
return redirect()->intended('/');
}
public function render()
{
return view('livewire.auth.login')
->layout('layouts.auth', ['title' => 'Connexion']);
}
}
+42
View File
@@ -0,0 +1,42 @@
<?php
namespace App\Livewire\Auth;
use App\Models\User;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Illuminate\Validation\Rules;
use Livewire\Component;
class Register extends Component
{
public string $name = '';
public string $email = '';
public string $password = '';
public string $password_confirmation = '';
public function register()
{
$this->validate([
'name' => ['required', 'string', 'max:255'],
'email' => ['required', 'string', 'lowercase', 'email', 'max:255', 'unique:'.User::class],
'password' => ['required', 'string', 'confirmed', Rules\Password::defaults()],
]);
$user = User::create([
'name' => $this->name,
'email' => $this->email,
'password' => Hash::make($this->password),
]);
Auth::login($user);
return redirect('/');
}
public function render()
{
return view('livewire.auth.register')
->layout('layouts.auth', ['title' => 'Inscription']);
}
}