laravel5.1でミドルウェア機能を使って、独自Basic認証を実装してみた。

laravel5.1でミドルウェア機能を使って、独自Basic認証を実装してみた。

参考URL: http://qiita.com/sogawa@github/items/c6ac3e9f46447aa32668

Q1, そもそもミドルウェアって何?
A1, URLをリクエストされた時に、route.phpで各種コントローラーに処理を振り分ける前(後も出来る)に処理を入れたい時に使う。
ユーザ認証とか、全ページで同じ処理をしたい時に使うと便利!

artisanで生成されたてで何も処理は書かれていないMiddleware


Q2, ミドルウェアの使い方は?

A2, 以下の通り。
a, まず、生成されたファイル内のhandle関数内に、行いたい処理を書きます。
b, 次にlaravelに登録(app/Http/Kernel.php)します。

グローバルl($middleware)で定義しちゃうと、個別($routeMiddleware)に指定する意味がなくなるので、どちらかだけに登録する。

Q3, とりあえず、グローバル($middleware)の方に登録してみたけど、後はどうしたらいいの?
A3, その時点で、どのURLをリクエストしてもTestMiddlewareの処理が走るようになります。
以下のように記述すると、簡易的なアクセスログが作れます。

http://localhost/project_name/public/sample にアクセスすると、storage\logs\laravel.logに出力される
[2016-10-21 01:33:10] local.INFO: Requested PATH /sample
[2016-10-21 01:33:13] local.INFO: Requested PATH /sample

Q4, もっと他に使い道は?
A4, laravelデフォルトのBasic認証(auth.basic)より簡単に出来る(データベースを使わない)

これで、どのページでもBasic認証がかかる様になった。

Q5, Basic認証のログイン用アカウントを、個人テーブル・会社テーブルの両方のどちらのID/PASSでもOKにしたい!
A5, 以下の通りで実装出来た!

a, MySQL側でCreate Viewを使い、両方のテーブルを結合させておく

b, Loginモデルを作っておく(コーディングは何もしなくても良い。親クラスの継承メソッドでアクセスできるようになる)

c, Kernel.phpにもglobal登録

d, Basic認証の処理を実装


e, route.phpに実装して、動作を確認してみる。

Basic認証ダイアログが出る。個人・会社のどちらかのテーブルに登録されているID/PASSなら認証される。
http://localhost/project_name/public/test

ログインIDから、ユーザ情報を取得して表示する
http://localhost/project_name/public/profile

わざとBasic認証ダイアログを表示させ、認証クリアする
ID/PASSに何を入力しても認証されない。
http://localhost/project_name/public/logout

特に意味はないが、Basic認証が途中で切れていないかチェック用
http://localhost/project_name/public/test2