以下のサイトを参考に、User認証とは別にAdmin認証を実装しました。
【Laravel7でユーザー認証_9】マルチ認証機能を使って管理者を作成する
しかし、
管理者用ログイン画面から情報を入力してログインボタンをクリックしても、
↓
同じログイン画面に戻ってしまいます……
■ルート web.php
<?php use Illuminate\Support\Facades\Route; Route::get('/', function () { return view('welcome'); }); Auth::routes(); Route::get('/home', 'HomeController@index')->name('home'); //ユーザーのパスワード変更 省略 //退会処理 Route::get('/deactive', 'Auth\DeactiveController@showDeactiveForm')->name('deactive.form'); Route::post('/deactive', 'Auth\DeactiveController@deactive')->name('deactive'); //Admin Route::namespace('Admin')->prefix('admin')->name('admin.')->group(function() { //Admin下のコントローラーを使用するので、namespace Route::get('/', 'HomeController@index'); //追加した Route::get('home', 'HomeController@index')->name('home'); Route::get('login', 'Auth\LoginController@showLoginForm'); Route::post('login', 'Auth\LoginController@login')->name('login'); Route::post('logout', 'Auth\LoginController@logout')->name('logout'); });
■ルート一覧(php artisan route:list)
---------------------------------------------------------+-------------+ | Domain | Method | URI | Name | Action | Middleware | +--------+----------+------------------------+------------------+------------------- | | GET|HEAD | / | | Closure | web | | | GET|HEAD | admin | admin. | App\Http\Controllers\Admin\HomeController@index | web | | | | | | | auth:admin | | | GET|HEAD | admin/home | admin.home | App\Http\Controllers\Admin\HomeController@index | web | | | | | | | auth:admin | | | POST | admin/login | admin.login | App\Http\Controllers\Admin\Auth\LoginController@login | web | | | | | | | guest:admin | | | GET|HEAD | admin/login | admin. | App\Http\Controllers\Admin\Auth\LoginController@showLoginForm | web | | | | | | | guest:admin | | | POST | admin/logout | admin.logout | App\Http\Controllers\Admin\Auth\LoginController@logout | web | | | GET|HEAD | api/user | | Closure | api | | | | | | | auth:api | | | POST | deactive | deactive | App\Http\Controllers\Auth\DeactiveController@deactive | web | | | | | | | auth | | | GET|HEAD | deactive | deactive.form | App\Http\Controllers\Auth\DeactiveController@showDeactiveForm | web | | | | | | | auth | | | GET|HEAD | home | home | App\Http\Controllers\HomeController@index | web | | | | | | | auth | | | POST | login | | App\Http\Controllers\Auth\LoginController@login | web | | | | | | | guest | | | GET|HEAD | login | login | App\Http\Controllers\Auth\LoginController@showLoginForm | web | | | | | | | guest | | | POST | logout | logout | App\Http\Controllers\Auth\LoginController@logout | web | +--------+----------+------------------------+------------------+-------------------
(文字数制限のため、password confirm等は省略しました)
■コントローラー Admin\Auth\LoginController.php
<?php namespace App\Http\Controllers\Admin\Auth; use App\Http\Controllers\Controller; use App\Providers\RouteServiceProvider; use Illuminate\Foundation\Auth\AuthenticatesUsers; use Illuminate\Http\Request; //追加 //use Illuminate\Support\Facades\Auth; //別サイトを見て追加してみた class LoginController extends Controller { use AuthenticatesUsers; protected $redirectTo = RouteServiceProvider::ADMIN_HOME; public function __construct() { $this->middleware('guest:admin')->except('logout'); } protected function guard() { //Userはトレイトのを使用しているが、Adminはここで上書きする return Auth::guard('admin'); } //ログインフォームのview指定 public function showLoginForm() { return view('admin.auth.login'); } //ログアウトの処理 public function logout(Request $request) { Auth::guard('admin')->logout(); return $this->loggedOut($request); } //ログアウト時のリダイレクト先 public function loggedOut(Request $request) { return redirect(route('admin.login')); } }
■管理者ログインフォームのビュー views\admin\auth\login.blade.php
@extends('layouts.admin.app') @section('content') <div class="container"> <div class="row justify-content-center"> <div class="col-md-8"> <div class="card"> <div class="card-header">{{ __('Admin') }}{{ __('Login') }}</div> <div class="card-body"> <form method="POST" action="{{ route('admin.login') }}"> @csrf <div class="form-group row"> <label for="username" class="col-md-4 col-form-label text-md-right">{{ __('UserName') }}</label> <div class="col-md-6"> <input id="username" type="username" class="form-control @error('username') is-invalid @enderror" name="username" value="{{ old('username') }}" required autocomplete="username" autofocus> @error('username') <span class="invalid-feedback" role="alert"> <strong>{{ $message }}</strong> </span> @enderror </div> </div> <div class="form-group row"> <label for="password" class="col-md-4 col-form-label text-md-right">{{ __('Password') }}</label> <div class="col-md-6"> <input id="password" type="password" class="form-control @error('password') is-invalid @enderror" name="password" required autocomplete="current-password"> @error('password') <span class="invalid-feedback" role="alert"> <strong>{{ $message }}</strong> </span> @enderror </div> </div> <div class="form-group row"> <div class="col-md-6 offset-md-4"> <div class="form-check"> <input class="form-check-input" type="checkbox" name="remember" id="remember" {{ old('remember') ? 'checked' : '' }}> <label class="form-check-label" for="remember"> {{ __('Remember Me') }} </label> </div> </div> </div> <div class="form-group row mb-0"> <div class="col-md-8 offset-md-4"> <button type="submit" class="btn btn-primary"> {{ __('Admin') }}{{ __('Login') }} </button> </div> </div> </form> </div> </div> </div> </div> </div> @endsection
アドバイスをいただけますと幸いです。
追記
■RouteServiceProvider::ADMIN_HOMEの値
app/Providers/RouteServiceProvider.php
protected $namespace = 'App\Http\Controllers'; public const HOME = '/home'; public const ADMIN_HOME = '/admin/home';
バリデーションエラーが起きてログインページへリダイレクトされて再表示されているけど、エラーメッセージをどこにも表示していないので、ただ再表示されているだけに見えている、ということはないですか?
↑失礼しました、ログインページのBladeを見るとエラーメッセージは表示されそうですね。
RouteServiceProvider::ADMIN_HOME がどのような値になっているかも掲載されると良いでしょう。
参考にされたサイトで、設定キャッシュクリアのコマンドが php artisan config:cache と書かれていますが、php artisan config:clear が正しいので注意しましょう。もし php artisan config:cache を実行してしまったなら、php artisan config:clear でクリアした後に、問題となっている動作を再確認してみましょう。
ありがとうございます。RouteServiceProvider::ADMIN_HOMEについて追記させていただきました。
キャッシュクリアのコマンドもありがとうございます!
guardが効いてなくてuserテーブル見てるのか? login実装したらどうなります?
あなたの回答
tips
プレビュー