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
Laravelのバージョンも追記された方が良いと思います。認証周りはバージョンによってかなり違うと思いますので。
> 飛べるはずのregisterに飛べません。
registerに飛べないのは以下の行でregisterを無効にしているためではないでしょうか。
Auth::routes(['register' => false]);
投稿ありがとうございます。現状他のパスワードリセット画面にも飛べてしまいます。
ログインユーザーがパスワードリセット関連の画面に飛べるのは問題ないと思います。
php artisan route:listコマンドの結果と、以下のコードも掲載されると良いと思います。
- App\Http\Kernelクラスの$routeMiddleware
- App\Http\Controllers\Auth\LoginControllerクラスのコンストラクタ
ログイン済みユーザーがログイン画面に飛べてしまうのをなんとかしたいです!