2017-11-12 12 views
0

私はLaravel Authの足場に取り組んでいます。私のLoginController.phpファイルの中に私のredirectToメソッドがあります。私はそれが条件付きのリダイレクトを持つようにしていません。しかし、私がログインルートをテストするたびに、私の条件の中で指定されたルートの代わりに/homeにルートが行きます。Laravel 5.4の認証ミドルウェアがredirectToメソッドの問題をオーバーライドしました

LoginController.php

<?php 
 

 
namespace App\Http\Controllers\Auth; 
 

 
use Auth; 
 
use App\Role; 
 
use App\Http\Controllers\Controller; 
 
use Illuminate\Foundation\Auth\AuthenticatesUsers; 
 

 
class LoginController extends Controller 
 
{ 
 
    /* 
 
    |-------------------------------------------------------------------------- 
 
    | Login Controller 
 
    |-------------------------------------------------------------------------- 
 
    | 
 
    | This controller handles authenticating users for the application and 
 
    | redirecting them to your home screen. The controller uses a trait 
 
    | to conveniently provide its functionality to your applications. 
 
    | 
 
    */ 
 

 
    use AuthenticatesUsers; 
 

 
    /** 
 
    * Create a new controller instance. 
 
    * 
 
    * @return void= 
 
    */ 
 
    public function __construct() 
 
    { 
 
     $this->middleware('guest')->except('logout'); 
 
    } 
 

 
    protected function redirectTo() 
 
    { 
 
     $user = Auth::user(); 
 
     if($user->isEmployer()){ 
 
      return '/employer'; 
 
     } 
 
      
 
     return '/home'; 
 
     
 
    } 
 

 
}

RedirectIfAuthenticated.php

<?php 
 

 
namespace App\Http\Middleware; 
 

 
use Closure; 
 
use Illuminate\Support\Facades\Auth; 
 

 
class RedirectIfAuthenticated 
 
{ 
 
    /** 
 
    * Handle an incoming request. 
 
    * 
 
    * @param \Illuminate\Http\Request $request 
 
    * @param \Closure $next 
 
    * @param string|null $guard 
 
    * @return mixed 
 
    */ 
 
    public function handle($request, Closure $next, $guard = null) 
 
    { 
 
     if (Auth::guard($guard)->check()) { 
 
      return redirect('/home'); 
 
     } 
 

 
     return $next($request); 
 
    } 
 
}

web.php

<?php 
 

 
/* 
 
|-------------------------------------------------------------------------- 
 
| Web Routes 
 
|-------------------------------------------------------------------------- 
 
| 
 
| Here is where you can register web routes for your application. These 
 
| routes are loaded by the RouteServiceProvider within a group which 
 
| contains the "web" middleware group. Now create something great! 
 
| 
 
*/ 
 

 
Route::get('/', function() { 
 
    return view('welcome'); 
 
}); 
 

 
Auth::routes(); 
 

 
Route::get('/employer', '[email protected]'); 
 
Route::get('/home', '[email protected]')->name('home');

私は私のif文の中dd()機能を書き、それが作業を行います。問題はリダイレクトが何であっても常に/homeに行くことです。

redirectToメソッドを使用している点は、guest認証ミドルウェアが常にその機能をオーバーライドする場合はありませんか?

ミドルウェアでそのメソッドをオーバーライドしなくても、このリダイレクトメソッドにどのように依存することができますか?あなたの条件に応じて、あなたのRedirectIfAuthenticatedミドルウェアを変更する必要が

おかげ

+0

web.phpファイルを共有できますか? – HasilT

+0

私はちょうどそれを追加しました。 – 75Kane

+0

EmployerController @ index()関数にアクセスするときにミドルウェアが動作しますか? – HasilT

答えて

2

。このように:

public function handle($request, Closure $next, $guard = null) 
{ 
    if (Auth::guard($guard)->check()) { 
     if(Auth::guard($guard)->user()->isEmployer()) 
      { 
       return redirect('/employer'); 

      } else return redirect('/home'); 
    } 

    return $next($request); 
} 

redirectTo方法は、ログイン成功/レジスタの後にユーザーをリダイレクトするために使用されます。しかし、ミドルウェアは、コントローラの前(または後)の要求を常に分析してコントローラに入る(または出る)機能が異なります。

私はあなたがすでにこれを知っていると思います。欠けているのはそれです。ログインが成功した後にユーザーをリダイレクトする場合は、ロジックをredirectToメソッド内に配置するか、AuthenticatesUsers trait.AtherWikiLaravelデフォルト/homeルートにリダイレクトするredirectTo属性を使用してリダイレクトするルートを指定する必要があります。 これは、ユーザーがログインフォームを送信した場合にのみ発生します。すでにサインインしているユーザーを別の場所(ここではルート/employer)にリダイレクトする場合は、ミドルウェアを使用して定義する必要があります。

関連する問題