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

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

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

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

2回答

1504閲覧

LaravelのMulti-Authでログイン直後に別のguardのログイン画面に飛ばされる

workr

総合スコア158

Laravel

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

1クリップ

投稿2017/09/06 07:28

編集2017/09/07 00:57

Laravel 5.4 標準の Multi-Auth 機能を利用して、2系統のログイン処理を実装しました。

両方をログイン、ログアウトを繰り返しているとまれに正しいパスワードでログインボタンを押すと別のguardのログイン画面に飛ばされてしまうことがあります。

この時ログイン自体は成功しているので、URL手入力で本来のログイン後のアドレスに移動すると正しくログインできていることが確認できます。

LoginController にはそれぞれ適切な $redirectTo プロパティを設定してあります。メソッド guard() もオーバーライド済みです。

以下が再現手順です。

  1. ガード users のログイン画面とガード admins のログイン画面を別のタブで開いておく
  2. ガード users でログインする
  3. ログアウトする
  4. ガード admins のタブでログインをしようとすると Token Mismatch エラー
  5. 一旦ブラウザバックして admins のログイン画面を再読込した上で再度ログインする
  6. users のログイン画面に飛ばされる(adminsとしてはログインできている)

ログイン失敗時の遷移先については app/Exceptions/Handler.php の unauthenticated() を改造しています。

php

1 $guard = array_get($exception->guards(), 0); 2 3 if($guard == 'admins') { 4 $route = 'admin.login'; 5 } else { 6 $route = 'login'; 7 } 8 return redirect()->guest(route($route));

何か解決する方法や原因を絞り込む手がかりなどはないでしょうか?
よろしくお願いいたします。

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

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

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

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

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

aro10

2017/09/06 11:32

記載のPHPコードは、App\Exception\Handlerのrenderの修正部分ということでしょうか。どこのコードかを記載するとより適切な回答を得やすいかと思います。
workr

2017/09/07 00:59

App\Exceptions\Handler の unauthenticated() メソッドです。ログイン周りは「artisan make:auth」コマンドを利用しています。
guest

回答2

0

現象を誤認しているような気がします。
以下の点確認してみてください。

その1

  1. ガード admins のタブでログインをしようとすると Token Mismatch エラー

このToken MismatchはCsrfトークンでエラーになってるだけじゃないでしょうか?もしそうだとするならば、この現象は本件とは無関係だと思います。認証の確認をするのに一時的にsessionのタイムアウト時間を短くしていてそのまま忘れていたというのはよくあることなので、config/session.phpのlifetimeをあわせて確認してみてはいかがでしょうか?

その2

  1. 一旦ブラウザバックして admins のログイン画面を再読込した上で再度ログインする
  2. users のログイン画面に飛ばされる(adminsとしてはログインできている)

ログインには成功しているけどusers のログイン画面に行ってしまうとおっしゃっています。なので確認するべきなのはログイン成功時の遷移先だと思います。LoginControllerの$redirectToを記述されているかと思いますのでもう一度ご確認ください。

ログイン失敗時の遷移先については app/Exceptions/Handler.php の unauthenticated()とのことですが、こちらは関係ないように思います。「ログインはできている」んですし。

その3
そもそも普通にadminsの方でログインした後に狙ったページに遷移するんでしょうか?実はそもそもうまく動いていなかったみたいなことはよくあるかと思うので、再度確認してみてください。

蛇足
Multi-Authの場合、guardごとにLoginControllerを2種類(UserLoginControllerとAdminLoginControllerみたいな感じ)にすることもできますし、単一のLoginControllerで済ますこともできるかと思います。この辺りどのようにしているのかが不明なので、もう少し詳細を教えていただければピンポイントで回答できるかもしれません。

投稿2018/05/25 07:32

YamajiDaisuke

総合スコア215

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

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

workr

2018/05/25 09:19

LoginControllerはguardごとに2つ用意しています。それぞれ別々の$redirectToがセットされており、showLoginForm()とguard()が専用のものにオーバーライドされています。 質問時点(2017年)では5.4を使っていましたがLaravel 5.5以降ではこの問題が発生しなくなったことから当時のバグだったのではないかと考えています。 1. セッションに関してはデフォルトなのでlifetimeは120秒です。変更しても変化はありませんでした。 2. 公式パッケージに更新があった影響か質問当時と少し挙動が変わりました。 2種類のログインフォームを同時に開いておく ↓ usersのログイン、ログアウト ↓ adminsのログイン試行 ↓ TokenMismatchのためブラウザバック ↓ なぜかusersのログアウト直前に見ていたページにリダイレクト (このページはusersとしての認証が必須ですがログアウト済みのはず) ↓ ブラウザ更新 ↓ usersのログイン画面に遷移 TokenMismatch自体の原因はログアウト時にセッションを破棄している関係上避けられないのだと思います。この挙動自体は正常と考えています。 3. users単独、admins単独であればどちらも正常にログイン、ログアウトできます。ログインフォームを別のブラウザタブで同時に表示していたときのみ発生するようです。
YamajiDaisuke

2018/05/25 09:58

コメントありがとうございます。 あと気になるところでいうと、RedirectIfAuthenticatedミドルウェアあたりですかね。 あとはキャッシュ周りも少し確認した方が良さそうな気がします。
guest

0

Multi-Auth 機能はあまり使っていませんが、session設定をデータベースにすると内容確認がわかりやすいかと思いますが、
手がかりとしては、同一ブラウザでは別タブでもCookieが共有な事からセッション情報も共有されており、何かしらの競合等がしているかもしれません。
Xdebug等によるステップ実行などでデバッグしていくと解決の糸口があるかもしれません。
基本的には別分類のユーザーを同時に操作することはあまり想定されていない感じがします。

投稿2017/09/07 15:28

編集2017/09/07 15:53
aro10

総合スコア4106

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問