Laravelで二段階認証とか既存のAuthを使わずにミドルウェアでいろいろやったのでまとめ。
環境
Laravel:5.5 LTS
独自のAuthクラスを作成
app/Http/Middleware/Auth.php
<?php namespace App\Http\Middleware; use Illuminate\Support\Facades\Redirect; use Closure; class Auth { /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle($request, Closure $next) { if (!session()->has('loginFlg')) { return redirect('admin/login'); } return $next($request); } }
セッションのログインフラグが立ってなかったらログイン画面へリダイレクト。
自作したAuthクラスをルートへ登録
app/Http/kernel.php
/** * The application's route middleware. * * These middleware may be assigned to groups or used individually. * * @var array */ protected $routeMiddleware = [ // 'auth' => \Illuminate\Auth\Middleware\Authenticate::class, 'auth' => \App\Http\Middleware\Auth::class, 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class, 'can' => \Illuminate\Auth\Middleware\Authorize::class, 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, ];
既存のAuthと名前が被るのでコメントアウトして追加
ルートに対しミドルウェアを指定
routes/web.php
Route::group(['middleware' => ['auth']], function () { Route::get('admin/my', 'Admin\MyController@index') Route::get('/', function () { return view('welcome'); }); });
管理画面はログインフラグが立ってないとログイン画面にリダイレクトさせたいので管理画面のルートはgroup内に追加していく。
welcomeはログインフラグが立ってない場合ログイン画面にリダイレクトするかのテスト。
myページとwelcomeページにアクセスしてログインフラグが立っていないときちんとリダイレクトしたのでこの書き方でまとめて記載していく。