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

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

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

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

Q&A

1回答

1122閲覧

【Laravel】ログインユーザーがログインページに飛べてしまう

nakamu

総合スコア82

Laravel

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

0グッド

0クリップ

投稿2021/04/13 18:35

編集2021/04/16 04:14

Auth::routesを使ったのに、ログインユーザーがログインページに飛べてしまいます。
また、逆に飛べるはずのregisterに飛べません。
フレームワークにはそこまで用意されていないのか。
Auth::routesを使ったログインは調べると見つかりますがそれ以降の記事が見つからず。

laravel

1// RedirectIfAuthenticated 2 3 public function handle($request, Closure $next, $guard = null) 4 { 5 if (Auth::guard($guard)->check()) { 6 // return redirect(RouteServiceProvider::HOME); 7 return redirect('/'); 8 } 9 10 return $next($request); 11 }

laravel

1// web.php 2 3Auth::routes(['register' => false]); 4Route::group(['middleware' => ['auth']], function () { 5 Route::get('/', 'Dashboard\ViewController@index')->name('dashboard.index'); 6 Route::get('/register', 'Auth\RegisterController@showRegistrationForm')->name('register'); 7 Route::post('/register', 'Auth\RegisterController@register'); 8});

laravel

1// Handler 2 3 protected function unauthenticated($request, AuthenticationException $exception) 4 { 5 if ($request->expectsJson()) { 6 return response()->json(['error' => 'Unauthenticated.'], 401); 7 } 8 9 return redirect()->guest(route('login')); 10 }

laravel

1<?php 2// LoginConroller.php 3 4namespace App\Http\Controllers\Auth; 5 6use App\Http\Controllers\Controller; 7use App\Http\Requests\LoginRequest; 8use Illuminate\Http\Request; 9use Illuminate\Support\Facades\Auth; 10 11class LoginController extends Controller 12{ 13 /** 14 * @return View 15 */ 16 public function showLoginForm() { 17 return view('login.index'); 18 } 19 20 /** 21 * @param App\Http\Requests\LoginRequest $request 22 */ 23 public function login(LoginRequest $request) { 24 25 $credentials = $request->only('email', 'password'); 26 27 if (Auth::attempt($credentials)) { 28 $request->session()->regenerate(); 29 return redirect('/'); 30 } 31 32 return back()->withErrors([ 33 'login_error' => 'メールアドレスかパスワードが間違っています' 34 ]); 35 } 36 37 public function logout() 38 { 39 Auth::logout(); 40 return redirect('/login'); 41 } 42} 43

laravel

1<?php 2 3namespace App\Http; 4 5use Illuminate\Foundation\Http\Kernel as HttpKernel; 6use Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful; 7 8class Kernel extends HttpKernel 9{ 10 /** 11 * The application's global HTTP middleware stack. 12 * 13 * These middleware are run during every request to your application. 14 * 15 * @var array 16 */ 17 protected $middleware = [ 18 // \App\Http\Middleware\TrustHosts::class, 19 \App\Http\Middleware\TrustProxies::class, 20 \Fruitcake\Cors\HandleCors::class, 21 \App\Http\Middleware\CheckForMaintenanceMode::class, 22 \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class, 23 \App\Http\Middleware\TrimStrings::class, 24 \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class, 25 ]; 26 27 /** 28 * The application's route middleware groups. 29 * 30 * @var array 31 */ 32 protected $middlewareGroups = [ 33 'web' => [ 34 \App\Http\Middleware\EncryptCookies::class, 35 \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, 36 \Illuminate\Session\Middleware\StartSession::class, 37 // \Illuminate\Session\Middleware\AuthenticateSession::class, 38 \Illuminate\View\Middleware\ShareErrorsFromSession::class, 39 \App\Http\Middleware\VerifyCsrfToken::class, 40 \Illuminate\Routing\Middleware\SubstituteBindings::class, 41 ], 42 43 'api' => [ 44 EnsureFrontendRequestsAreStateful::class, 45 'throttle:60,1', 46 \Illuminate\Routing\Middleware\SubstituteBindings::class, 47 ], 48 ]; 49 50 /** 51 * The application's route middleware. 52 * 53 * These middleware may be assigned to groups or used individually. 54 * 55 * @var array 56 */ 57 protected $routeMiddleware = [ 58 'auth' => \App\Http\Middleware\Authenticate::class, 59 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 60 'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class, 61 'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class, 62 'can' => \Illuminate\Auth\Middleware\Authorize::class, 63 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 64 'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class, 65 'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class, 66 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, 67 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class, 68 ]; 69} 70

イメージ説明
イメージ説明

追記
バージョン追加
laravel 7
laravel/ui 2.4

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

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

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

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

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

Lulucom

2021/04/14 06:28 編集

Laravelのバージョンも追記された方が良いと思います。認証周りはバージョンによってかなり違うと思いますので。 > 飛べるはずのregisterに飛べません。 registerに飛べないのは以下の行でregisterを無効にしているためではないでしょうか。 Auth::routes(['register' => false]);
nakamu

2021/04/14 03:53

投稿ありがとうございます。現状他のパスワードリセット画面にも飛べてしまいます。
Lulucom

2021/04/14 07:45 編集

ログインユーザーがパスワードリセット関連の画面に飛べるのは問題ないと思います。 php artisan route:listコマンドの結果と、以下のコードも掲載されると良いと思います。 - App\Http\Kernelクラスの$routeMiddleware - App\Http\Controllers\Auth\LoginControllerクラスのコンストラクタ
nakamu

2021/04/16 04:12

ログイン済みユーザーがログイン画面に飛べてしまうのをなんとかしたいです!
guest

回答1

0

ログインのアクションに guest ミドルウェアを指定していないためだと思います。
LoginController クラスに以下のようなコンストラクタを追加するとどうでしょうか。

php

1 /** 2 * Create a new controller instance. 3 * 4 * @return void 5 */ 6 public function __construct() 7 { 8 $this->middleware('guest')->except('logout'); 9 }

RedirectIfAuthenticatedは、App\Http\Kernelクラスの$routeMiddlewareでguestとして定義されています。これをログインのアクションに指定する必要があります。

投稿2021/04/16 04:26

編集2021/04/16 04:33
Lulucom

総合スコア1899

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問