Logout and associated test.

This commit is contained in:
Ryan Scherler
2020-10-29 23:05:59 -07:00
parent ea81cd7dbf
commit ad9a1cbd65
13 changed files with 110 additions and 8 deletions
+1
View File
@@ -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,
],
+4
View File
@@ -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>
+3 -2
View File
@@ -1,3 +1,4 @@
<div>
Dashboard
<div class="flex justify-between space-x-2">
<h1>{{ __('Dashboard') }}</h1>
<livewire:filament-logout />
</div>
+6 -2
View File
@@ -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');
});
});
+6 -2
View File
@@ -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}`.");
}
}
+1 -1
View File
@@ -7,8 +7,8 @@ use Livewire\Component;
class ForgotPassword extends Component
{
public $email;
public $message;
public $email;
protected $rules = [
'email' => 'required|email',
+6
View File
@@ -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();
+28
View File
@@ -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');
}
}
+3
View File
@@ -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');
}
+1 -1
View File
@@ -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')]);
}
}
+42
View File
@@ -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'));
}
}