laravel5.5のマルチログインで利用モデルが切り替わっていなさそうなとき確認すべき場所
解決済
回答 2
投稿
- 評価
- クリップ 0
- VIEW 2,611
前提・実現したいこと
laravel5.5にてマルチログインを実装したい
発生している問題・エラーメッセージ
Users以外に使いたいAdmin(管理者ログイン)ページからログインしようとすると下記のようなメッセージが表示されます
http://local.test_app/admin/login
These credentials do not match our records.
該当のソースコード
ルート
Auth::routes();
//1) User 認証不要
Route::get('/', function () { return redirect('/home'); });
//2) User ログイン後
Route::group(['middleware' => 'auth:user'], function() {
Route::get('/home', 'HomeController@index')->name('home');
});
//3) Admin 認証不要
Route::group(['prefix' => 'admin'], function() {
Route::get('/', function () { return redirect('/admin/home'); });
Route::get('login', 'Admin\LoginController@showLoginForm')->name('admin.login');
Route::post('login', 'Admin\LoginController@login');
});
//4) Admin ログイン後
Route::group(['prefix' => 'admin', 'middleware' => 'auth:admin'], function() {
Route::post('logout', 'Admin\LoginController@logout')->name('admin.logout');
Route::get('home', 'Admin\HomeController@index')->name('admin.home');
});
Admin.php
<?php
namespace App;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
class Admin extends Authenticatable
{
use Notifiable;
protected $fillable = [
'name', 'email', 'password',
];
protected $hidden = [
'password', 'remember_token',
];
}
config/auth
<?php
return [
'defaults' => [
'guard' => 'user',
'passwords' => 'users',
],
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
],
'user' => [
'driver' => 'session',
'provider' => 'users',
],
'admin' => [
'driver' => 'session',
'provider' => 'admins',
],
],
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\User::class,
],
'admins' => [
'driver' => 'eloquent',
'model' => App\Admin::class,
],
],
'passwords' => [
'users' => [
'provider' => 'users',
'table' => 'password_resets',
'expire' => 60,
],
'admins' => [
'provider' => 'admins',
'table' => 'password_resets',
'expire' => 60,
],
],
];
Admin/LoginController
<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class LoginController extends Controller
{
use AuthenticatesUsers;
protected $redirectTo = '/admin/home';
public function __construct()
{
$this->middleware('guest:admin')->except('logout');
}
public function showLoginForm()
{
return view('admin.login');
}
protected function guard()
{
return Auth::guard('admin');
}
public function logout(Request $request)
{
Auth::guard('admin')->logout();
$request->session()->flush();
$request->session()->regenerate();
return redirect('/admin/login');
}
}
Admin/HomeController
<?php
namespace App\Http\Controllers\Admin;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
class HomeController extends Controller
{
public function __construct()
{
$this->middleware('auth:admin');
}
public function index()
{
return view('admin.home');
}
}
Viewはadminディレクトリを新たに作りそこに既存のログインページとHomeページをコピーしRouteの部分をadmin.xxxxxに変更してあります
試したこと
ガードの付け忘れかとも思ったのですが、上記の設定で問題ないように思えました。自分ひとりではどうにも手詰まりなのでここは確認したのか?この設定はどうなっているかなど何かコメント・ご指摘いただければと思います。
補足情報(FW/ツールのバージョンなど)
laravel5.5
php 7
homestead
mysql
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
0
LoginControllerがuseしているトレイトのIlluminate\Foundation\Auth\AuthenticatesUsersのsendFailedLoginResponseメソッドが、
以下エラーの翻訳メッセージをtrans('auth.failed')で返しているところになります。
These credentials do not match our records.
よって、AuthenticatesUsersのattemptLoginメソッド辺りで、ガードやリクエストのフォームデータが意図した物か、ダンプして確認していくと解決にむかえるかと思います。
また、adminsテーブルのデータが存在するか、パスワードはRegisterControllerのcreateメソッドのようにbycriptヘルパー等を使ってハッシュに変換して保存されているか等も確認すると良いかと思います。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
configの変更は反映されてますか?
php artisan config:cache
キャッシュの削除を試してみてください。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.23%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2018/02/08 14:21
パスワードがハッシュ化されていないことが原因でした。