UnsplashのSergey Shmidtが撮影した写真
ログイン済みの場合だけ該当のルートを許可し、
未ログイン状態だとアクセスを弾く設定の書き方です。
■1つのルートのみ
以下のように「->middleware(‘auth’)」を付けるだけです。
Route::get('/users', [ UserController::class, 'index' ])->name('users.index')->middleware('auth');
■複数のルートをまとめて
Route::middleware('auth')->group(function(){
~~ここに任意のルートを記述する~~
Route::get( '/users', [UserController::class, 'index']); // ⇐例
})
未ログイン時のリダイレクト先は「/bootstrap/app.php」で指定します。
以下の赤字部分を任意のパスに書き換えてください。
<?php
use Illuminate\Foundation\Application;
use Illuminate\Foundation\Configuration\Exceptions;
use Illuminate\Foundation\Configuration\Middleware;
return Application::configure(basePath: dirname(__DIR__))
->withRouting(
web: __DIR__.'/../routes/web.php',
commands: __DIR__.'/../routes/console.php',
health: '/up',
)
->withMiddleware(function (Middleware $middleware) {
$middleware->redirectGuestsTo('/users/signin');
})
->withExceptions(function (Exceptions $exceptions) {
//
})->create();
ログインユーザーの情報は「Auth::user()」で取得します。
「Autu::user()->name」のようにnameカラムを指定すると、任意カラムの値を取得することができます。
今回は「Auth::user()」が空かどうかでログイン状態を判定して処理を分岐させます。
use Illuminate\Support\Facades\Auth; // Authファサードの呼出
if(empty(Auth::user())){
~~未ログイン時の処理~~
}else{
~~ログイン済みの時の処理~~
}
もしくは、以下のようにヘルパーを使う
if(empty(auth()->user())){
~~未ログイン時の処理~~
}else{
~~ログイン済みの時の処理~~
}
ビューの表示をログイン済みか否かで変える方法です。
■ログイン済みの時に表示させる
@auth
<p>ログイン済みです</p>
@endauth
■ログインしてない時に表示させる
@guest
<p>ログイン状態していません</p>
@endguest
以上です。