mirror of
https://github.com/filamentphp/filament.git
synced 2026-09-24 15:42:09 +08:00
Logout and associated test.
This commit is contained in:
@@ -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,
|
||||
],
|
||||
|
||||
|
||||
@@ -17,4 +17,8 @@ return [
|
||||
|
||||
'register' => 'Create a new account',
|
||||
|
||||
'logout' => 'Sign out',
|
||||
|
||||
'loggedout' => 'You have been successfully signed out.',
|
||||
|
||||
];
|
||||
|
||||
@@ -27,4 +27,6 @@
|
||||
<x-filament::loader class="w-6 h-6 absolute left-0 ml-2 pointer-events-none" wire:loading />
|
||||
{{ __('Login') }}
|
||||
</x-filament::button>
|
||||
|
||||
<x-filament::message />
|
||||
</form>
|
||||
@@ -0,0 +1,7 @@
|
||||
<button type="button"
|
||||
wire:click="logout"
|
||||
@if ($class)
|
||||
class="{{ $class }}"
|
||||
@endif>
|
||||
{{ $label }}
|
||||
</button>
|
||||
@@ -1,3 +1,4 @@
|
||||
<div>
|
||||
Dashboard
|
||||
<div class="flex justify-between space-x-2">
|
||||
<h1>{{ __('Dashboard') }}</h1>
|
||||
<livewire:filament-logout />
|
||||
</div>
|
||||
+6
-2
@@ -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');
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@@ -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}`.");
|
||||
}
|
||||
}
|
||||
@@ -7,8 +7,8 @@ use Livewire\Component;
|
||||
|
||||
class ForgotPassword extends Component
|
||||
{
|
||||
public $email;
|
||||
public $message;
|
||||
public $email;
|
||||
|
||||
protected $rules = [
|
||||
'email' => 'required|email',
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
namespace Filament\Http\Livewire\Auth;
|
||||
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Livewire\Component;
|
||||
|
||||
class Logout extends Component
|
||||
{
|
||||
public $class;
|
||||
|
||||
public function logout()
|
||||
{
|
||||
if (Auth::guest()) {
|
||||
return redirect()->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');
|
||||
}
|
||||
}
|
||||
@@ -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');
|
||||
}
|
||||
|
||||
|
||||
@@ -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')]);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
<?php
|
||||
|
||||
namespace Filament\Tests\Feature;
|
||||
|
||||
use Illuminate\Foundation\Testing\RefreshDatabase;
|
||||
use Livewire\Livewire;
|
||||
use Filament\Tests\TestCase;
|
||||
use Filament\Tests\Database\Models\User;
|
||||
use Filament\Http\Livewire\Auth\Logout;
|
||||
|
||||
class LogoutTest extends TestCase
|
||||
{
|
||||
use RefreshDatabase;
|
||||
|
||||
public function test_authenticated_user_can_see_log_out_button()
|
||||
{
|
||||
$this->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'));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user