2016-04-12 7 views
0

私はメインAuthenticate.phpミドルウェアを編集しようとしているが、私は以下を追加したときに、私はLaravel編集認証ミドルウェア

app.appはあなたに何回も

をリダイレクトしたエラーを取得します私の意図は、ユーザがユーザ名を持っているかどうかを確認するために認証ミドルウェアを編集することです。これにより、誰かが登録ページを終了してから、単にウェブサイトの安全な部分に入るのを防ぐことができます。

認証ミドルウェア:

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

    // This is the modified portion. Check for a username, if one is found, complete 
     the request, otherwise redirect back to the oauth page. 

    if (Auth::user()->username) 
    { 
     return $next($request); 
    } 

    return redirect()->route('oauth.oauth')->with('user' , Auth::user()->id); 

} 
+0

このユースケースは何ですか?誰かがサイトの安全な場所に行かないようにしたい場合は、ミドルウェアをそのまま使用することができます。すでにゲストであるかどうかをチェックし、そうであればホームページにリダイレクトします必要)。 – James

+0

登録には2段階があり、1番はメール、パスワードなどです.2番は外部サービスのOAuthです。 OAuthを完了する前にユーザーが終了した場合は、ウェブサイトの一部を再度開こうとすると、そのページに戻るようにしたいと考えています。数多くのルートがauthミドルウェアを使用しているので、私はどこにでも適用するために新しいものを作るのではなく、そのミドルウェアを変更したいと思います。 –

+0

このルートはこの認証ミドルウェアによって保護されていますか? – James

答えて

0

あなたはAuth::user()->usernameが存在しない場合、あなたのOAuthのページにリダイレクトするために認証ミドルウェアを使用して、循環参照を作成しています。

oauthページに当たっていて、そのチェックに失敗しているため、常にそのページにリダイレクトされています。

最高のことは、新しいミドルウェアでこれを分割することですが、これをしたくないとすれば、彼らが当てているURLをチェックしてこれに基づいて除外を行うことができます。

トップまでuse Request;を追加して、あなたのミドルウェアのボディに以下を追加します:

if (Request::path() == 'your/oauth/path') 
{ 
    return $next($request); 
} 

だからそれはこのように収まる可能性があります。たとえば

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

    // This is the modified portion. Check for a username, if one is found, complete 
     the request, otherwise redirect back to the oauth page. 

    if (Auth::user()->username) 
    { 
     return $next($request); 
    } 

    if (Request::path() == 'your/oauth/path') 
    { 
     return $next($request); 
    } 

    return redirect()->route('oauth.oauth')->with('user' , Auth::user()->id); 

} 

'your/oauth/path'を実際のパスに置き換えてください。その例は完全なURLのように見えますwww.example.com/your/oauth/path

関連する問題