Laravel ui vue -auth では未実装のログアウト機能を既存のhome.blade.phpをカスタマイズした簡単なものですが作ってみました。
今回使用したファイルは
welcome.blade.php
home.blade.php
web.php
ExceptionHandler.php です。
まずwelcome.blade.php home.blade.php をコピー、バックアップを取ってから welcome.blade.php の BODY部分の不要な要素を削除します。
$ cp ./resources/views/welcome.blade.php{,.org}
$ cp ./resources/views/home.blade.php{,.org}
$ vi ./resources/views/welcome.blade.php
次にhome.blade.php のログインチェック部分にログアウトフォームを追加します。今回はルックフィールをテキスト表示にそろえるためリンクを aタグからGETで送信するようにしました。
$ vi ./resources/views/home.blade.php
{{ __('You are logged in!') }}<br>
<div> <a href="#" onclick="event.preventDefault(); document.getElementById('logout-form').submit();">Logout</a> <form id="logout-form" action="{{ route('logout') }}" method="POST" style="display: none;"> @csrf </form> </div>
続いて web.php に ‘logout’ リンクをGET送信したときのルートを記述します。
$ vi ./routes/web.php
Route::get('/', function () { return view('welcome'); }); Auth::routes(); Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home'); Route::get('logout', 'Auth\LoginController@logout')->name('logout'); ← (追記
最後にHandler.php に例外時に強制ログアウトするコードを追記すると良い感じになりました。
$ vi ./app/Exceptions/Handler.php
/** * Register the exception handling callbacks for the application. */ public function register(): void { $this->reportable(function (Throwable $e) { // }); }
/* ↓↓↓↓(以下追記)↓↓↓↓ */ public function render($request, Throwable $exception) { if($exception instanceof TokenMismatchException) { // ログアウトリクエスト時は、強制的にログアウト if($request->is('logout')) { return redirect('login'); } } return parent::render($request, $exception); } /* ↑↑↑↑↑(追記ここまで)↑↑↑↑↑↑ */ }
.
ログアウトアンカーをクリックすると
.
welcome.blade.php トップに戻りました。
.
参考URL: [Laravel] ログアウトリンクを作る