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

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

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

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

Q&A

解決済

2回答

453閲覧

laravel5.5 マルチ認証でログインができない

aoki_monpro

総合スコア45

Laravel

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

0グッド

0クリップ

投稿2019/03/06 02:34

編集2019/03/07 00:19

これらの記事を参考に、マルチ認証を実装したく、

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

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

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

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

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

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

guest

回答2

0

そもそもLaravelのドキュメントルートの設定が守られていないように見受けられますが、そのあたりは問題ないですか?

  • [

Laravel 5.7 インストール:設定-Publicディレクトリ
](https://readouble.com/laravel/5.7/ja/installation.html#configuration)

Laravelをインストールできたら、Webサーバのドキュメント/Webルートがpublicディレクトリになるように設定してください。

投稿2019/03/06 03:30

m.ts10806

総合スコア80765

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

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

aoki_monpro

2019/03/06 03:37

本番環境時に設定しようかと思ってはおりました、 ただuser 側は問題なくログインできるのでここが原因ではないのではと思ってはおります。
m.ts10806

2019/03/06 03:39

なるほど。了解です。 ただ、正しく設定されていないと問題の切り分けが複雑で困難になりますので まずは正しく設定された状態での操作をすすめます。
aoki_monpro

2019/03/06 03:48 編集

了解しました、 http://localhost/newbook/master/login で表示されるよう、public フォルダ内ファイルを直下に置き換え、index.php内の autoload.php, bootstrap/app.php へのパスを変更したのですが、 状況変わらずです・・
m.ts10806

2019/03/06 03:55

私もきちんと環境揃えられてないのですぐすぐの回答が難しかったりします。申し訳ないです。 ルーティングの優先順位のような気もしますが…
m.ts10806

2019/03/06 03:57

あとはすでに認証状態で、セッションがクリアされてないとか
aoki_monpro

2019/03/06 04:07 編集

ルーティング masterを上に持っていったのですが変わらずでした、 newbook/master/login でログインボタンを押すと、 newbook/login にリダイレクトされるようで、 Handler.php の書き方がまずい?と思いつつ 原因判明しておりません。。 あ、リダイレクトしなくなった・・謎です・・
guest

0

自己解決

気を取り直して 別プロジェクトとして 最初からインストールしたら無事 マルチログインできました。

ファイル差分確認するも原因わからず・・

一旦クローズします、お手数おかけしました。

投稿2019/03/07 05:00

aoki_monpro

総合スコア45

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問