これらの記事を参考に、マルチ認証を実装したく、
https://takahashi-it.com/php/laravel54-multi-auth/
https://qiita.com/s_of_p/items/3c066f56123cb05a24f1
php artisan make:auth で userを作成後、
tinkerで masterユーザー作成し、
http://localhost/newbook/master/login にアクセスし、ログインしようとするものの、
http://localhost/newbook/master/home にリダイレクトがかかりません。
どこかの記載が足りないと思うのですが検討つかず・・
お手数ですがアドバイスいただけませんでしょうか。
環境:laravel 5.5
php
1//config/auth.php 2<?php 3 4return [ 5 6 'defaults' => [ 7 'guard' => 'user', 8 'passwords' => 'users', 9 ], 10 11 12 'guards' => [ 13 'web' => [ 14 'driver' => 'session', 15 'provider' => 'users', 16 ], 17 18 'api' => [ 19 'driver' => 'token', 20 'provider' => 'users', 21 ], 22 23 'user' => [ 24 'driver' => 'session', 25 'provider' => 'users', 26 ], 27 'manage' => [ 28 'driver' => 'session', 29 'provider' => 'manages', 30 ], 31 32 'master' => [ 33 'driver' => 'session', 34 'provider' => 'master', 35 ], 36 37 ], 38 39 'providers' => [ 40 'users' => [ 41 'driver' => 'eloquent', 42 'model' => App\User::class, 43 ], 44 45 'manages' => [ 46 'driver' => 'eloquent', 47 'model' => App\Models\Manage::class, 48 ], 49 50 'master' => [ 51 'driver' => 'eloquent', 52 'model' => App\Models\Master::class, 53 ], 54 55 // 'users' => [ 56 // 'driver' => 'database', 57 // 'table' => 'users', 58 // ], 59 ], 60 61 'passwords' => [ 62 'users' => [ 63 'provider' => 'users', 64 'table' => 'password_resets', 65 'expire' => 60, 66 ], 67 68 'manages' => [ 69 'provider' => 'manages', 70 'table' => 'password_resets', 71 'expire' => 60, 72 ], 73 74 'master' => [ 75 'provider' => 'master', 76 'table' => 'password_resets', 77 'expire' => 60, 78 ], 79 ], 80 81]; 82
php
1//app/Exceptions/Handler.php 2<?php 3 4namespace App\Exceptions; 5 6use Exception; 7use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler; 8use Illuminate\Auth\AuthenticationException; 9 10class Handler extends ExceptionHandler 11{ 12 //略 13 14 /** 15 * 認証していない場合にガードを見てそれぞれのログインページへ飛ばず 16 * 17 * @param \Illuminate\Http\Request $request 18 * @param AuthenticationException $exception 19 * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\RedirectResponse|\Illuminate\Http\Response 20 */ 21 public function unauthenticated($request, AuthenticationException $exception) 22 { 23 if($request->expectsJson()){ 24 return response()->json(['error' => 'Unauthenticated.'], 401); 25 } 26 27 28 if (in_array('master', $exception->guards(), true)) { 29 return redirect()->guest(route('master.login')); 30 } 31 32 return redirect()->guest(route('login')); 33 } 34} 35
php
1//web.php 2/* 3|-------------------------------------------------------------------------- 4| Master without auth 5|-------------------------------------------------------------------------- 6*/ 7Route::group(['prefix' => 'master'], function() { 8 Route::get('/', function () { return redirect('/master/home'); }); 9 Route::get('login', 'Master\LoginController@showLoginForm')->name('master.login'); 10 Route::post('login', 'Master\LoginController@login')->name('master.login'); 11}); 12 13/* 14|-------------------------------------------------------------------------- 15| Master with auth 16|-------------------------------------------------------------------------- 17*/ 18Route::group(['prefix' => 'master', 'middleware' => 'auth:master'], function() { 19 Route::post('logout', 'Master\LoginController@logout')->name('master.logout'); 20 Route::get('home', 'Master\HomeController@index')->name('master.home'); 21}); 22 23
php
1//App/Models/Master.php 2<?php 3 4namespace App\Models; 5 6use Illuminate\Notifications\Notifiable; 7use Illuminate\Foundation\Auth\User as Authenticatable; 8 9class Master extends Authenticatable 10{ 11 use Notifiable; 12 13 protected $table = 'masters'; 14 public $timestamps = false; 15 public $incrementing = false; 16 17 protected $fillable = [ 18 'name', 'email', 'password', 19 ]; 20 21 protected $hidden = [ 22 'password', 'remember_token', 23 ]; 24} 25
php
1//App/Http/Controller/Master/LoginController.php 2<?php 3 4namespace App\Http\Controllers\Master; 5 6use App\Http\Controllers\Controller; 7use Illuminate\Foundation\Auth\AuthenticatesUsers; 8use Illuminate\Http\Request; 9use Illuminate\Support\Facades\Auth; 10 11 12class LoginController extends Controller 13{ 14 use AuthenticatesUsers; 15 16 17 protected $redirectTo = 'master/home'; 18 19 public function __construct() 20 { 21 $this->middleware('guest:master')->except('logout'); 22 } 23 24 public function showLoginForm() 25 { 26 return view('master.login'); //管理者ログインページのテンプレート 27 } 28 29 protected function guard() 30 { 31 return Auth::guard('master'); //管理者認証のguardを指定 32 } 33 34 public function logout(Request $request) 35 { 36 Auth::guard('master')->logout(); 37 $request->session()->flush(); 38 $request->session()->regenerate(); 39 40 return redirect('master.login'); 41 } 42} 43
php
1//App/Http/Controller/Master/HomeController.php 2<?php 3 4namespace App\Http\Controllers\Master; 5 6use Illuminate\Http\Request; 7use App\Http\Controllers\Controller; 8 9class HomeController extends Controller 10{ 11 12 public function __construct() // guard setting is set to route.php. This construct is to make sure. 13 { 14 $this->middleware('auth:master'); 15 } 16 17 public function index() 18 { 19 return view('master.home'); 20 } 21} 22
php
1//views/master/login.blade.php 2<!DOCTYPE html> 3<html lang="{{ app()->getLocale() }}"> 4<head> 5 <!-- 抜粋 --> 6 7 <form class="form-horizontal" method="POST" action="{{ route('master.login') }}"> 8 {{ csrf_field() }} 9 <div class="columns is-mobile is-centered"> 10 <div class="column is-half"> 11 Master/login 12 <div class="field"> 13 <label class="label">Email</label> 14 <div class="control has-icons-left has-icons-right"> 15 <input id="email" type="email" class="input is-danger" name="email" type="email" placeholder="Email input" value="{{ old('email') }}"> 16 <span class="icon is-small is-left"> 17 <i class="fas fa-envelope"></i> 18 </span> 19 <span class="icon is-small is-right"> 20 <i class="fas fa-exclamation-triangle"></i> 21 </span> 22 </div> 23 <p class="help is-danger">This email is invalid</p> 24 </div> 25 26 <div class="field"> 27 <label class="label">Password</label> 28 <div class="control"> 29 <input id="password" type="password" class="input" name="password" required> 30 @if ($errors->has('password')) 31 <span class="help-block"> 32 <strong>{{ $errors->first('password') }}</strong> 33 </span> 34 @endif 35 </div> 36 </div> 37 38 <div class="field"> 39 <div class="control"> 40 <label class="checkbox"> 41 <input type="checkbox" name="remember" {{ old('remember') ? 'checked' : '' }}> 42 Remember Me 43 </label> 44 </div> 45 </div> 46 47 <div class="field is-grouped"> 48 <div class="control"> 49 <button type="submit" class="button is-link">Login</button> 50 </div> 51 </div> 52 53 </div> 54 55 </div> 56 57 </form> 58 59 </div><!-- container --> 60 61</div> 62 63 <!-- Scripts --> 64 <script src="{{ asset('js/app.js') }}"></script> 65</body> 66</html>
php
1views/master/home.blade.php 2@extends('layouts.app_master') 3 4@section('content') 5<div class="container"> 6 <div class="row"> 7 <div class="col-md-8 col-md-offset-2"> 8 <div class="panel panel-default"> 9 <div class="panel-heading">Dashboard</div> 10 11 <div class="panel-body"> 12 @if (session('status')) 13 <div class="alert alert-success"> 14 {{ session('status') }} 15 </div> 16 @endif 17 18 You are logged in! 19 </div> 20 </div> 21 </div> 22 </div> 23</div> 24@endsection
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/03/06 03:37
2019/03/06 03:39
2019/03/06 03:48 編集
2019/03/06 03:55
2019/03/06 03:57
2019/03/06 04:07 編集