ラボ > Laravel、Lumen:ユーザー認証関連

laravel auth認証とは関係なしにルーティングを振り分けたい

auth認証を使わずにグループ分けしたい

作成日:2024-03-06, 更新日:2024-03-06

やりたいこと

ひとまず、auth認証は関係なしでセッションに「hoge」という項目を持つか持たないか…で振り分けたい

必要な処理

  • ミドルウェアの設定
  • ルーティングの設定

ミドルウェアの設定

ざっくりと…

  • ベースになる基底クラスの作成
  • セッションに「hoge」という項目を持つ…というミドルウェアの作成
  • セッションに「hoge」という項目を持たない…というミドルウェアの作成
  • カーネルにミドルウェアの登録(※ルートミドルウェアとして登録)

ベースになる基底クラスの作成

namespace App\Http\Middleware;

use Closure;

abstract class SessionCheckBase
{
    protected function checkSession($request)
    {
        return $request->session()->has('hoge');
    }

    abstract public function handle($request, Closure $next);
}

セッションに「hoge」という項目を持つ…というミドルウェアの作成

namespace App\Http\Middleware;

use Closure;

class CustomAuthMiddleware extends SessionCheckBase
{
    public function handle($request, Closure $next)
    {
        if ($this->checkSession($request)) {
            return $next($request);
        }

        return redirect('login');
    }
}

セッションに「hoge」という項目を持たない…というミドルウェアの作成

namespace App\Http\Middleware;

use Closure;

class CustomGuestMiddleware extends SessionCheckBase
{
    public function handle($request, Closure $next)
    {
        if (!$this->checkSession($request)) {
            return $next($request);
        }

        return redirect('dashboard');
    }
}

カーネルにミドルウェアの登録(※ルートミドルウェアとして登録)

「$routeMiddleware」ってのがいなかったので、新規に追加してミドルウェアをセット

protected $routeMiddleware = [ // 「$middlewareAliases」の中に入れるのが正解のような気がする…
    // ...
    'custom.guest' => \App\Http\Middleware\CustomGuestMiddleware::class,
    'custom.auth' => \App\Http\Middleware\CustomAuthMiddleware::class,
];

※調べると「$routeMiddleware」が新しい、「$middlewareAliases」が古い表記で意味合い的には同じらしいが…真偽は不明

通常のブラウザリクエストかajaxのリクエストかで戻り値を変更したい

「redirect()->route('login')」とするところをajaxのリクエストの場合、jsonで返したい

▼「redirect()->route('login')」のトコを改修

if ($request->ajax() || $request->wantsJson()) {
    return response()->json(['message' => 'Unauthorized'], 401);
}
else {
    return redirect()->route('login');
}

ルーティングの設定

Route::middleware('custom.guest')->group(function() {
    Route::prefix('guestpage')->group(function(){
        // 省略

Route::middleware('custom.auth')->group(function() {
    Route::prefix('authpage')->group(function(){
        // 省略