2016-11-01 17 views
0

私はOrgController @ storeに行くはずのフォームを持っています。何が起こるかは、/にリダイレクトされ、OrgControllerの自分のストア機能に決して入れないようです。Laravel 5.3のフォームは、投稿時にログインするようにリダイレクトされます

Firebugの私のネットワークタブによると、/ org/addは、Auth Middlewareへの私の呼び出しをコメントアウトしても何らかの理由でログインするGETリクエストを作成します。

ログインするGETリクエストは、私がログインしていることを確認してから、Laravel Auth RedirectIfAuthenticatedが設定されている場所にリダイレクトされます。 (この場合は/となります)。

基本的に私のルーティングはauthを尊重するだけでなく、自分のフォームにもPOSTしたいと思っています。

私のルートこのように見えます。

Route::group(['prefix' => 'org'], function() { 
    Route::get('search', '[email protected]'); 
    Route::get('browse', '[email protected]'); 
    Route::get('add', '[email protected]'); 
    Route::post('add', '[email protected]'); 
}); 

と私のフォームはこのように見えます。

<form method="post" action=""> 
     <div class="form-group"> 
      <label for="parent_org">Parent Organization</label> 
      <select class="form-control" id="parent_org" required="true"> 
         <option>Org Unit 1</option> 
         <option>Org Unit 2</option> 
         <option>Org Unit 3</option> 
         <option>Org Unit 4</option> 
      </select> 
     </div> 
     <div class="form-group"> 
      <label for="org_name">Org Unit Name</label> 
      <input type="text" class="form-control" id="org_name" required="true"> 
     </div> 
     <div class="checkbox"> 
      <label><input type="checkbox">Will users be added directly to this organization unit?</label> 
     </div> 
     <button type="submit" class="btn btn-primary">Add Org</button> 
</form> 

PHPの職人ルート:リストは、以下のことを示します。

|  | GET|HEAD | org     |  | App\Http\Controllers\[email protected]        | web,eventlog,auth | 
|  | POST  | org/add    |  | App\Http\Controllers\[email protected]        | web,eventlog,auth | 
|  | GET|HEAD | org/add    |  | App\Http\Controllers\[email protected]         | web,eventlog,auth | 
|  | GET|HEAD | org/browse    |  | App\Http\Controllers\[email protected]        | web,eventlog,auth | 
|  | GET|HEAD | org/search    |  | App\Http\Controllers\[email protected]        | web,eventlog,auth | 

私はAuthで構築されたLaravelを拡張したカスタムAuthプロバイダを使用しています。

ありがとうございます。

答えて

1

Woops。

問題は、私が例外ハンドラを入れたことを忘れていたことでした。

if ($exception instanceof TokenMismatchException) { 
      return redirect('/login'); 
    } 

同様に私のフォームにCSRFトークンがありませんでした。そこで、無効なCSRFトークンエラーを抑制し、ログインにリダイレクトしていました。

です。

1

セキュリティの目的で、ログインページまたは投稿要求のあるURLのトークンを無効にしないでください。フォームフィールドに{{csrf_token()}}を追加するだけです。 csrf_tokenは、入力された隠しフィールドにトークンを返します。あなたのフォームを外部からの悪用攻撃から保護します。

<form method="post" action=""> 
      <div class="form-group"> 
       <label for="parent_org">Parent Organization</label> 
     Add csrf_token anywhere inside your form 
      {{csrf_token()}} 
       <select class="form-control" id="parent_org" required="true"> 
          <option>Org Unit 1</option> 
          <option>Org Unit 2</option> 
          <option>Org Unit 3</option> 
          <option>Org Unit 4</option> 
       </select> 
      </div> 
      <div class="form-group"> 
       <label for="org_name">Org Unit Name</label> 
       <input type="text" class="form-control" id="org_name" required="true"> 
      </div> 
      <div class="checkbox"> 
       <label><input type="checkbox">Will users be added directly to this organization unit?</label> 
      </div> 
      <button type="submit" class="btn btn-primary">Add Org</button> 
    </form> 
関連する問題