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