2016-05-17 5 views
1

ログイン画面に権限のないすべてのユーザー(ログインしていない)をにしたい場合でも、存在しないルートにアクセスしようとするとになります。現在のところ、私のセットアップでは、権限のあるユーザーのページにアクセスしようとすると正常にリダイレクトされますが、存在しないページにアクセスしようとすると通常の404エラーがスローされます。私はこれらのリクエストをログインページにリダイレクトしたいと思います。ここに私の現在の設定があります:クライアントが存在しないルートにアクセスしようとした場合、デフォルトですべてのゲストリクエストをLaravelアプリのログインページにリダイレクトするにはどうすればよいですか?

// for localization purposes, this needs to be outside the localization group 
Route::post('login', 'Auth\[email protected]'); 
Route::post('register', 'Auth\[email protected]'); 

// for localization of auth as well as normal pages 
Route::group([ 
    'prefix' => LaravelLocalization::setLocale(), 
    'middleware' => ['localeSessionRedirect', 'localizationRedirect'], 
], function() 
{ 
    // localized auth routes 
    Route::get('login', 'Auth\[email protected]'); 
    // other localized auth routes... 

    // if not logged in, redirect to login screen 
    // (but throws a 404 if route doesn't exist) 
    Route::group(['middleware' => ['guest']], function() 
    { 
     return view('auth.login'); 
    }); 

    // Auth middleware group 
    Route::group(['middleware' => ['auth']], function() 
    { 
     // Post-Authentification Routes... 
    }); 
}); 
+0

どのようなLaravelのバージョンを使用しますか? 4と5、さらには5.0と5.2の大きな違いがあります – codedge

+0

私はバージョン5.2を使用します – dapperdanman1400

答えて

1

LaravelはNotFoundHttpExceptionをスローします。

あなたはこれらの手順

  • キャッチ例外を持っている必要がありますので、あなたの目標を達成するために\app\Exceptions\Handler.php

    下方法render()を編集する必要があり、この例外を処理するには

  • チェック(もしNotFoundHttpExceptionのinstanceofをご確認ください)ユーザーが認証されているかどうか。
  • 認証されていない場合は、 '/ login'にリダイレクトします。

は、あなたがこの

public function render($request, Exception $e) 
{ 
    if ($e instanceof \Symfony\Component\HttpKernel\Exception\NotFoundHttpException && !Auth::check()) 
      return redirect('/login'); 
    return parent::render($request, $e); 
} 

のようなものを取得し、あなたが認証されたユーザーのみがアクセスするために必要なすべてのルートのauthミドルウェアを使用し続けます参照してください。

+0

これは私が必要としていたものです!ありがとうございました! – dapperdanman1400

+0

ゲストにリダイレクトするだけでなく、ログインしたユーザーを404の場合にログインページにリダイレクトするようにも見えます。回避策を見つけようとしていますが、問題があるので、この質問に遭遇しました。例外としてAuthは機能しないようです。ルートが一致せず、ミドルウェア(StartSessionとAuthenticate)が実行されなかったからです。 (Laravel 5.3) – Tadej

+0

@Tadej https://github.com/laravel/laravel/blob/31fce5c503d872c5389ffbbae59310413f9f9966/app/Http/Kernel.php#L25-L54 – xdevnull

関連する問題