質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

Q&A

0回答

908閲覧

管理者ログインができない。管理者画面とユーザー画面それぞれのログイン画面を作りたい・

yuri1333

総合スコア2

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

0グッド

0クリップ

投稿2021/08/20 09:36

編集2021/08/20 09:39

実装内容と困っていること

Laravelで管理者とユーザーそれぞれでログイン画面を作成し、マルチログインを実装しております。

★しかし、管理者のログイン画面で管理者のログイン情報を入力すると、「ログイン情報がない」とエラーが出ます。
かつ、管理者のログイン画面でユーザーのログイン情報を入力するとユーザーのログインができます。

【補足】config/auth.phpの

PHP

1 'defaults' => [ 2 'guard' => 'user', 3 'passwords' => 'users', 4 ],

「'guard' => 'user'」を「 'guard' => 'admin'」にすると
★と逆の現象が起こります(管理者はログインできるが、ユーザーはログインできなくなる)

ユーザーのログイン画面ではユーザーが、
管理者のログイン画面では管理者がログインできるようにさせたいのですが、
下記の記述で何かおかしいところあればご指摘ください(私自身はconfig/auth.phpが怪しいなと思ってます)

AuthenticatesUsersを使わない方が良いというご意見も頂きましたが。。いかがでしょうか。

■参考にしたサイト
https://qiita.com/namizatork/items/5d56d96d4c255a0e3a87
https://coinbaby8.com/laravel-multi-login.html

開発環境

・Laravel 8.49.2
・MySQL 8.0
・使用認証機能 laravel.ui

config/auth.php

PHP

1<?php 2 3return [ 4 5 6 'defaults' => [ 7 'user' => [ 8 'guard' => 'user', 9 'passwords' => 'users', 10 ], 11 ], 12 13 14 'guards' => [ 15 // 'web' => [ 16 // 'driver' => 'session', 17 // 'provider' => 'users', 18 // ], 19 20 'user' => [ 21 'driver' => 'session', 22 'provider' => 'users', 23 ], 24 25 'admin' => [ 26 'driver' => 'session', 27 'provider' => 'admins', 28 ], 29 30 'api' => [ 31 'driver' => 'token', 32 'provider' => 'users', 33 'hash' => false, 34 ], 35 ], 36 37 38 'providers' => [ 39 'users' => [ 40 'driver' => 'eloquent', 41 'model' => App\Models\User::class, 42 ], 43 44 'admins' => [ 45 'driver' => 'eloquent', 46 'model' => App\Models\Admin::class, 47 ] 48 49 ], 50 51 'passwords' => [ 52 'users' => [ 53 'provider' => 'users', 54 'table' => 'password_resets', 55 'expire' => 60, 56 'throttle' => 60, 57 ], 58 59 'admins' => [ 60 'provider' => 'admins', 61 'table' => 'password_resets', 62 'expire' => 60, 63 'throttle' => 60, 64 ] 65 ], 66 67 'password_timeout' => 10800, 68 69]; 70 71

Handler.php

PHP

1<?php 2 3namespace App\Exceptions; 4 5use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler; 6use Illuminate\Auth\AuthenticationException; 7use Throwable; 8 9class Handler extends ExceptionHandler 10{ 11 /** 12 * A list of the exception types that are not reported. 13 * 14 * @var array 15 */ 16 protected $dontReport = [ 17 // 18 ]; 19 20 /** 21 * A list of the inputs that are never flashed for validation exceptions. 22 * 23 * @var array 24 */ 25 protected $dontFlash = [ 26 'current_password', 27 'password', 28 'password_confirmation', 29 ]; 30 31 /** 32 * Register the exception handling callbacks for the application. 33 * 34 * @return void 35 */ 36 public function register() 37 { 38 $this->reportable(function (Throwable $e) { 39 // 40 }); 41 } 42 43 public function handle($request, Closure $next, $guard = null) 44 { 45 if (Auth::guard($guard)->check() && $guard === 'user') { 46 return redirect(RouteServiceProvider::HOME); 47 } elseif (Auth::guard($guard)->check() && $guard === 'admin') { 48 return redirect(RouteServiceProvider::ADMIN_HOME); 49 } 50 51 return $next($request); 52 } 53} 54

Route/web.php

PHP

1<?php 2 3use Illuminate\Support\Facades\Route; 4 5Auth::routes(); 6 7Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home'); 8 9// ユーザー 10Route::namespace('User')->prefix('user')->name('user.')->group(function () { 11 12 // ログイン認証関連 13 Auth::routes([ 14 'register' => true, 15 'reset' => false, 16 'verify' => false 17 ]); 18 19 // ログイン認証後 20 Route::middleware('auth:user')->group(function () { 21 22 // TOPページ 23 Route::resource('home', 'HomeController', ['only' => 'index']); 24 25 }); 26}); 27 28// 管理者 29Route::prefix('admin')->name('admin.')->group(function () { 30 31 // ログイン認証関連 32 Auth::routes([ 33 'register' => true, 34 'reset' => false, 35 'verify' => false 36 ]); 37 38 // ログイン認証後 39 Route::middleware('auth:admin')->group(function () { 40 41 // TOPページ 42 Route::resource('home', 'HomeController', ['only' => 'index']); 43 44 }); 45 46}); 47

管理者: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() { return Auth::guard('admin'); } 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')); } }

ユーザー:LoginController.php

<?php namespace App\Http\Controllers\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::HOME; public function __construct() { $this->middleware('guest:user')->except('logout'); } // Guardの認証方法を指定 protected function guard() { return Auth::guard('user'); } // ログイン画面 public function showLoginForm() { return view('auth.login'); } // ログアウト処理 public function logout(Request $request) { Auth::guard('user')->logout(); return $this->loggedOut($request); } // ログアウトした時のリダイレクト先 public function loggedOut(Request $request) { return redirect(route('user.login')); } }

管理者ビュー:

@extends('layouts.app_admin') @section('content') <div class="container"> <div class="row justify-content-center"> <div class="col-md-8"> <div class="card"> <div class="card-header">{{ __('Login') }}</div> <div class="card-body"> <form method="POST" action="{{ route('admin.login') }}"> @csrf <div class="form-group row"> <label for="email" class="col-md-4 col-form-label text-md-right">{{ __('E-Mail Address') }}</label> <div class="col-md-6"> <input id="email" type="email" class="form-control @error('email') is-invalid @enderror" name="email" value="{{ old('email') }}" required autocomplete="email" autofocus> @error('email') <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"> {{ __('Login') }} </button> </div> </div> </form> </div> </div> </div> </div> </div> @endsection

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問