laravel5.1でusersテーブル以外を認証情報として使う方法

laravel5.1でusersテーブル以外を認証情報として使う方法

1, 前提条件として、laravelではユーザ認証をusersテーブルで行うように実装されている

2, usersテーブル以外のテーブルを使う & laravel既存のユーザ認証を使う場合は、id,email,passwordの3カラムが必須となる。
※1 emailとpasswordだけでもログインフォームはパス出来たけど、id無しだと次ページ以降はログイン状態を維持できない(認証のためにsessionに書き込むIDが無い?)
※2 username, remember_token, timestampsは、無くても行けた。

3, 今回は、以前にやったみたいに2つのテーブルを結合したviewをusersテーブルの代わりに使う。

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

他に認証情報は無いので、database/migration/xxxxxxx_create_users_table.phpに、直接 create view を上書きする。

4, php artisan migrate:refresh –seed でテーブルを作り直す。
これだけでtable_aかtable_bにあるユーザ情報で、laravel標準のユーザ認証が使えるようになる。

5, auth::logout()を実行するとremember_tokenがアップデート出来ないよ~というエラーになる。unionしたviewなので当然出来ないのだが…。
update文を実行している場所を探すと vendor/laravel/framework/src/Illuminate/Auth/Guard.php 内を更新したら、エラーが出ずにログアウトできた。
※1, usersテーブルのremenber_tokenは、再ログイン時に自動的にログインするためのもの。ブラウザのクッキーに保存しておいて、同じハッシュ値なら認証となる。
※2, vendorフォルダ以下は、composer updateでパッケージを上書きされるので、project側でメソッドをオーボーライドしないとダメ! 後でやっておこう…。

6, ログインIDはemailカラムではなく、usernameカラムに変更

a, login.blade.phpの入力フォームのnameをemailからusername変更
b, App\Http\Controllers\Auth\AuthControllerに変数を追加

laravel5.1のユーザ認証のIDをemailカラムからusernameカラムに変更する方法