Laravel 5.2のMultiAuthでユーザーテーブルが切り替わらない
Laravel 5.2 で新しく追加された MultiAuth を使って User と AdminUser の2種類のログイン機能を実装しようとしています。
テーブルはそれぞれ users と admin_users で、User 関連はすべてデフォルトの php artisan make:auth で作られた認証をそのまま利用しています。
AdminUser 側はほとんどが User 関連のコピーとなっています。
一通り組み上げてテストしたところ、User は問題なく動作していますが、 AdminUser 側でログインしようとすると「These credentials do not match our records.」となってログインできません。
SQL を確認してみると
select * from `users` where `email` = 'admin@example.com' limit 1
となっており、User 用のテーブルから select しようとしてしまっているためユーザーを見つけることができなくなっているようです。
正常に動作させるには
select * from `admin_users` where `email` = 'admin@example.com' limit 1
となっていなければなりません。
config/auth.php は次のとおりです(部分)
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'web_admin' => [
'driver' => 'session',
'provider' => 'admin_users',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
],
],
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\User::class,
],
'admin_users' => [
'driver' => 'eloquent',
'model' => App\AdminUser::class,
],
],
routes.php はこのようになっています。
Route::group(['middleware' => 'web'], function () {
Route::group(['middleware' => 'guest:web_admin'], function () {
Route::get('admin/login', 'AdminAuth\AdminAuthController@showLoginForm');
Route::post('admin/login', 'AdminAuth\AdminAuthController@login');
Route::get('admin/logout', 'AdminAuth\AdminAuthController@logout');
});
Route::group(['middleware' => 'auth:web_admin'], function () {
Route::get('/admin/home','AdminHomeController@index');
});
Route::auth();
Route::get('/home', 'HomeController@index');
});
ビュー周りはデフォルトの auth のコピーで、POST先だけ admin/login となるように書き換えています。コントローラーも AuthController をコピーした AdminAuthController を使っています。修正点は $redirectTo と $loginView のみです。
User の認証には users テーブルを使い、AdminUsers の認証には admin_users テーブルを使うようにするには何が足りないのでしょうか?