Laravel で Basic 認証(ミドルウェア)

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 を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら

>> Twitter をフォローする

 

-チュートリアル, 初級