diff --git a/config/filament.php b/config/filament.php index c806e64d0d..8e4be020dd 100644 --- a/config/filament.php +++ b/config/filament.php @@ -81,6 +81,7 @@ return [ 'forgot-password' => Filament\Http\Livewire\Auth\ForgotPassword::class, 'reset-password' => Filament\Http\Livewire\Auth\ResetPassword::class, 'register' => Filament\Http\Livewire\Auth\Register::class, + 'logout' => Filament\Http\Livewire\Auth\Logout::class, 'dashboard' => Filament\Http\Livewire\Dashboard::class, ], diff --git a/resources/lang/en/auth.php b/resources/lang/en/auth.php index 51059f21ba..3b38a72987 100644 --- a/resources/lang/en/auth.php +++ b/resources/lang/en/auth.php @@ -17,4 +17,8 @@ return [ 'register' => 'Create a new account', + 'logout' => 'Sign out', + + 'loggedout' => 'You have been successfully signed out.', + ]; diff --git a/resources/views/livewire/auth/login.blade.php b/resources/views/livewire/auth/login.blade.php index ef820a1dd9..19ce264aef 100644 --- a/resources/views/livewire/auth/login.blade.php +++ b/resources/views/livewire/auth/login.blade.php @@ -27,4 +27,6 @@ {{ __('Login') }} + + \ No newline at end of file diff --git a/resources/views/livewire/auth/logout.blade.php b/resources/views/livewire/auth/logout.blade.php new file mode 100644 index 0000000000..b9893cd35c --- /dev/null +++ b/resources/views/livewire/auth/logout.blade.php @@ -0,0 +1,7 @@ + \ No newline at end of file diff --git a/resources/views/livewire/dashboard.blade.php b/resources/views/livewire/dashboard.blade.php index d1b66d86e9..ef79c65f12 100644 --- a/resources/views/livewire/dashboard.blade.php +++ b/resources/views/livewire/dashboard.blade.php @@ -1,3 +1,4 @@ -
- Dashboard +
+

{{ __('Dashboard') }}

+
\ No newline at end of file diff --git a/routes/web.php b/routes/web.php index 95fb1eba6f..bc2d15af78 100644 --- a/routes/web.php +++ b/routes/web.php @@ -34,10 +34,14 @@ Route::group([ // Authenticated routes Route::group(['middleware' => ['auth']], function () { // Dashboard - Route::get('/', config('filament.livewire.dashboard'))->name('dashboard'); + Route::get('/', config('filament.livewire.dashboard')) + // ->middleware('verified') + ->name('dashboard'); // Profile - // Route::get('profile', config('filament.livewire.profile'))->middleware('verified'); + // Route::get('profile', config('filament.livewire.profile')) + // ->middleware('verified') + // ->name('profile'); }); }); diff --git a/src/Commands/MakeUser.php b/src/Commands/MakeUser.php index bae96d50f9..5a454332dd 100644 --- a/src/Commands/MakeUser.php +++ b/src/Commands/MakeUser.php @@ -4,8 +4,9 @@ namespace Filament\Commands; use Illuminate\Console\Command; use Illuminate\Support\Facades\Hash; +use Illuminate\Auth\Events\Registered; use Filament\Traits\ConsoleValidation; -use App\Models\User; +use Filament\Contracts\User as UserContract; class MakeUser extends Command { @@ -44,14 +45,17 @@ class MakeUser extends Command return $this->secret('Password'); }, ['password', 'required|min:8']); - $user = User::create([ + $userClass = app(UserContract::class); + $user = $userClass::create([ 'name' => $name, 'email' => $email, 'password' => Hash::make($password), ]); + event(new Registered($user)); $appName = config('app.name', 'Laravel'); $loginURL = route('filament.login'); + $this->info("Success! You may now login to {$appName} at {$loginURL} with user `{$user->name}`."); } } \ No newline at end of file diff --git a/src/Http/Livewire/Auth/ForgotPassword.php b/src/Http/Livewire/Auth/ForgotPassword.php index 2e280560e4..65f06b0ab5 100644 --- a/src/Http/Livewire/Auth/ForgotPassword.php +++ b/src/Http/Livewire/Auth/ForgotPassword.php @@ -7,8 +7,8 @@ use Livewire\Component; class ForgotPassword extends Component { - public $email; public $message; + public $email; protected $rules = [ 'email' => 'required|email', diff --git a/src/Http/Livewire/Auth/Login.php b/src/Http/Livewire/Auth/Login.php index 358b4b22af..f42c6d58b4 100644 --- a/src/Http/Livewire/Auth/Login.php +++ b/src/Http/Livewire/Auth/Login.php @@ -11,6 +11,7 @@ class Login extends Component { use ThrottlesLogins; + public $message; public $email; public $password; public $remember = false; @@ -20,6 +21,11 @@ class Login extends Component 'password' => 'required|min:8', ]; + public function mount() + { + $this->message = session('message'); + } + public function login(Request $request) { $data = $this->validate(); diff --git a/src/Http/Livewire/Auth/Logout.php b/src/Http/Livewire/Auth/Logout.php new file mode 100644 index 0000000000..8e3fe4571a --- /dev/null +++ b/src/Http/Livewire/Auth/Logout.php @@ -0,0 +1,28 @@ +route('filament.login'); + } + + Auth::logout(); + session()->flash('message', __('filament::auth.loggedout')); + return redirect()->route('filament.login'); + } + + public function render() + { + return view('filament::livewire.auth.logout', ['label' => __('filament::auth.logout')]) + ->layout('filament::layouts.auth'); + } +} \ No newline at end of file diff --git a/src/Http/Livewire/Auth/Register.php b/src/Http/Livewire/Auth/Register.php index b827bafb8c..bbc9dd6eed 100644 --- a/src/Http/Livewire/Auth/Register.php +++ b/src/Http/Livewire/Auth/Register.php @@ -30,14 +30,17 @@ class Register extends Component public function register() { $this->validate(); + $userClass = app(UserContract::class); $user = $userClass::create([ 'name' => $this->name, 'email' => $this->email, 'password' => Hash::make($this->password), ]); + event(new Registered($user)); Auth::login($user); + return redirect()->route('filament.dashboard'); } diff --git a/src/Http/Livewire/Dashboard.php b/src/Http/Livewire/Dashboard.php index ca596ef020..4e0c3e4139 100644 --- a/src/Http/Livewire/Dashboard.php +++ b/src/Http/Livewire/Dashboard.php @@ -9,6 +9,6 @@ class Dashboard extends Component public function render() { return view('filament::livewire.dashboard') - ->layout('filament::layouts.auth'); + ->layout('filament::layouts.auth', ['title' => __('Dashboard')]); } } \ No newline at end of file diff --git a/tests/Feature/LogoutTest.php b/tests/Feature/LogoutTest.php new file mode 100644 index 0000000000..bae4ffcbd0 --- /dev/null +++ b/tests/Feature/LogoutTest.php @@ -0,0 +1,42 @@ +withoutExceptionHandling(); + $user = User::factory()->create(); + $this->actingAs($user) + ->get(route('filament.dashboard')) + ->assertSeeLivewire('filament-logout'); + } + + public function test_authenticated_user_can_log_out() + { + $user = User::factory()->create(); + Livewire::actingAs($user) + ->test(Logout::class) + ->call('logout') + ->assertRedirect(route('filament.login')) + ->assertSessionHas('message', __('filament::auth.loggedout')); + + $this->assertGuest(); + } + + public function test_guest_cannot_log_out() + { + Livewire::test(Logout::class) + ->call('logout') + ->assertRedirect(route('filament.login')); + } +} \ No newline at end of file