laravel5.5でセカンドパスワードを実装してみた。クレカ番号+セキュリティコード(3ケタ数字)みたいな感じ。
1, 例によってミドルウェアを作る
| 
					 1  | 
						php artisan make:middleware SecondPasswordMiddleware  | 
					
kernel.phpにも追加しておく
| 
					 1  | 
						 'second.auth' => 'App\Http\Middleware\SecondPasswordMiddleware',  | 
					
2, 中身を実装
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37  | 
						<?php namespace App\Http\Middleware; use Closure; use Illuminate\Support\Facades\Auth; // 認証ユーザ use Illuminate\Support\Facades\Hash; // パスワード比較用 class SecondPasswordMiddleware {     /**      * Handle an incoming request.      *      * @param  \Illuminate\Http\Request  $request      * @param  \Closure  $next      * @return mixed      */     public function handle($request, Closure $next)     {         //セッション変数にパスワードがあれば変数に格納         $second_password = session('second_password');         if ($request->has('second_password')) {             $second_password = $request->input('second_password');             // メッセージパスワードをセッション変数に格納して、どこからでも使えるようにする(laravelでは標準で暗号化される)             session(['second_password' => $second_password]);         }         // セカンドパスワードで認証済かどうかは、formでパスワードを投げてきたorセッション変数に入っているかで確認する         if(Hash::check($second_password, Auth::user()->second_password)){ // userテーブルにカラム追加しておく             return $next($request);         }else{             return response()->view('auth.second_password', compact('request','next'));         }     } }  | 
					
3, セカンド・パスワードだけ入力するbladeフォームを作る。
コツはactionが空欄な事(既に目的のurlになっているが、ミドルウェアで見れない) & getだとurl引数にパスワードが表示されるのでpost
| 
					 1 2 3 4 5 6  | 
						<form name="" method="post" action="">     {{ csrf_field() }}     <h1>セカンド・パスワードの確認</h1>     <input type="password" name="message_password">     <button type="submit">入 力</button> </form>  | 
					
4, ルーティング(web.php)で、目的のurlに対してpostでも行けるようにする
| 
					 1 2 3 4 5 6 7 8  | 
						    Route::group(['middleware' => 'second.auth'], function() {         Route::match(['get','post'], '/test1', 'HomeController@test1');         Route::match(['get','post'], '/test2', 'HomeController@test2');         // postしか必要なければ、わざわざgetを定義しなくても大丈夫         Route::post('test3', 'HomeController@test3');     });  |