作成日: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(){ // 省略