2016-05-11 13 views
0

私はLaravelフレームワークの絶対初心者です。 私はミドルウェアの問題を扱っています。Laravel 5.0 ::ミドルウェアの問題(ERR_TOO_MANY_REDIRECTSエラー)

下記のAdminController.phpのauthenticate.phpと__construct関数を使用すると、ログインできず、ERR_TOO_MANY_REDIRECTSエラーを処理する必要があります。

誰もこの種の問題に遭遇しましたか? この問題を解決するためのアドバイスはありますか?

英語は私の最初の言語ではありませんので、この投稿が理にかなっていない場合や、より多くの情報が必要な場合は、コメントを残してください! アドバイスをいただければ幸いです!前もって感謝します!

Authenticate.php

public function handle($request, Closure $next){ 
    if ($this->auth->guest()) { 
     if ($request->ajax()) { 
      return response('Unauthorized.', 401); 
     } 
     else { 
      return redirect()->guest('auth/login'); 
     } 
    } 

    if ($this->whoIsLoggedIn() == 'instructor'){ 
     return redirect('/instructor/home'); 
    } elseif ($this->whoIsLoggedIn() == 'admin') { 
     return redirect('/admin/home'); 
    } elseif ($this->whoIsLoggedIn() == 'student') { 
     return redirect('/student/home'); 
    } elseif($this->whoIsLoggedIn() == 'unknown'){ 
     return redirect('/auth/login'); 
    } 

    return $next($request); 
} 

public function whoIsLoggedIn(){ 

    $identity = ''; 

    foreach (\Auth::user()->roles as $role) { 
     if ($role->name == 'admin') { 
      return $identity = 'admin'; 
     } else if ($role->name == 'instructor') { 
      return $identity = 'instructor'; 
     } else if ($role->name == 'student'){ 
      return $identity = 'student'; 
     } else { 
      return $identity = 'unknown'; 
     } 
    } 
} 

AdminController.php

public function __construct(){ 
    $this->middleware('auth'); 
} 

答えて

1

あなたは慎重に見てみると、あなたのコードは、実際には無限のリダイレクトループを実装 - ユーザーがログインしていると、あなたのミドルウェアクラスは常にユーザーをさらにリダイレクトします。次のページにはおそらく同じミドルウェアが適用されているので、ユーザーは何度も何度もリダイレクトされます。

return $next($request); 

ミドルウェア・チェーンを終了し、そして、すべてが正常であれば、最終的にあなたのページにコントロールを与えます:いくつかの時点で

は、あなたのミドルウェアは、単にチェーン内の次のミドルウェアを呼び出すことになっています。

実装しようとしているもの(認証されたユーザーのデフォルトの開始ページ)は、このミドルウェアの代わりにAuthControllerにあるはずです。このミドルウェアは、ユーザーがちょうどログインしているのか、それともしばらく認証されているのかを知らない。

リダイレクト条件をAuthControllerのpostLogin()メソッドに移動することをお勧めします。これは、ユーザーが実際にログインしたときに一度だけ発生するようにするためです。ほとんどのコードをほとんどコピーできます。

+0

ご意見ありがとうございます、Denis。しかし、authenticate.phpはすでに$ next($ request)を返していたので、私は謝罪する必要があります。リダイレクト条件の後に...私はPHPファイル内のすべてのコードをコピーできませんでした... – ILoveBaymax

+0

とにかく届かない場合、問題はありません - あなたの認証されたユーザーは常に何度もリダイレクトされます。このリダイレクトロジックは、ログイン後に一度だけ発生します。 –

+0

あなたのアドバイスを見て、AuthControllerが継承しているコードを編集しました。デニスさんありがとう! – ILoveBaymax

関連する問題