Laravel6からはベーシック認証の機能が用意されています。
ただ、このやり方は、データベースを使ったやり方になります。
ベーシック認証用のレコードを作成しないといけなかったりで意外と面倒だったりします。
今回はデータベースを使ったりせず、もっと簡易的にBasic認証を作るやリ方を紹介します。
ゴール
以前、チュートリアルで作成したCRUDアプリにベーシック認証をかけてみます。
手順
INDEX
1)ミドルウェアの作成
アーティサンコマンドでミドルウェアのスケルトン(骨子)を作成します。
[root@example ~]# php artisan make:middleware BasicAuthMiddlewar
上記のコマンドを打つと App/Http/Middleware/ に BasicAuthMiddleware.php というファイル名でミドルウェアのスケルトンが生成されます。
ミドルウェアの handle メソッドを以下のように実装していきます。
(※ ID と PASS は「laraweb」で設定しました。)
:
public function handle($request, Closure $next)
{
$username = $request->getUser();
$password = $request->getPassword();
if ($username == 'laraweb' && $password == 'laraweb') {
return $next($request);
}
abort(401, "Enter username and password.", [
header('WWW-Authenticate: Basic realm="Sample Private Page"'),
header('Content-Type: text/plain; charset=utf-8')
]);
}
:
2)ミドルウェアを Kernel に登録
app/Http/Kernel.php の $routeMiddleware に、作成したミドルウェアを登録します。
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
:
// basicauth という名前で登録
'basicauth' => \App\Http\Middleware\BasicAuthMiddleware::class,
];
3)ファイルに認証をかける
登録した名前のミドルウェアで、対象のページをグループ化します。
prefixとミドルウェアの両方を指定したい場合は、grout() 内に配列で指定してやります。
(※入れ子のやり方でもいけます。)
詳細は以下をご参照ください。
Route::group(['prefix' => 'student', 'middleware' => 'basicauth'], function(){
/**
* 一覧
*/
Route::get('list', 'CrudController@getIndex');
/**
* 登録
*/
Route::get('new', 'CrudController@new_index'); // 入力
Route::patch('new','CrudController@new_confirm'); // 確認
Route::post('new', 'CrudController@new_finish'); // 完了
/**
* 編集
*/
Route::get('edit/{id}/', 'CrudController@edit_index'); // 編集
Route::patch('edit/{id}/','CrudController@edit_confirm'); // 確認
Route::post('edit/{id}/', 'CrudController@edit_finish'); // 完了
/**
* 詳細
*/
Route::get('detail/{id}/', 'CrudController@detail_index'); // 詳細
/**
* 削除
*/
Route::post('delete/{id}/', 'CrudController@us_delete'); // 削除
});
4)動作確認
ブラウザにアクセスして以下のようにベーシック認証がかかればOKです。
以上です。
仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら。