Laravel 5.3表格重定向到帖子登录

时间:2016-11-01 15:37:17

标签: php laravel routes laravel-5.3

我有一个表格应该发布到页面上的 OrgController @ store 。发生的事情似乎是重定向到/并且永远不会进入我在OrgController中的商店功能。

根据我在Firebug中的网络选项卡,然后POSTS to / org / add会因某种原因发出GET请求登录,即使我注释掉了我对Auth Middleware的调用。

GET请求登录后发现我已登录,然后将我重定向到Laravel Auth RedirectIfAuthenticated设置为的位置。 (在这种情况下是/)。

基本上我希望我的路由尊重auth,但也要POST到我的表单。

我的路线看起来像这样。

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

我的表格看起来像这样。

 <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 artisan route:list 显示以下内容。

|        | GET|HEAD | org                    |       | App\Http\Controllers\OrgController@search                              | web,eventlog,auth  |
|        | POST     | org/add                |       | App\Http\Controllers\OrgController@store                               | web,eventlog,auth  |
|        | GET|HEAD | org/add                |       | App\Http\Controllers\OrgController@add                                 | web,eventlog,auth  |
|        | GET|HEAD | org/browse             |       | App\Http\Controllers\OrgController@browse                              | web,eventlog,auth  |
|        | GET|HEAD | org/search             |       | App\Http\Controllers\OrgController@search                              | web,eventlog,auth  |

我正在使用一个自定义Auth提供程序来扩展内置在Auth。中的Laravel。

提前致谢

2 个答案:

答案 0 :(得分:1)

Woops。

问题是我忘了我已经放入了我的异常处理程序。

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

我的表格中也没有我的CSRF令牌。因此它抑制了无效的CSRF令牌错误,并且还重定向到登录。

..吸取了教训。

答案 1 :(得分:1)

出于安全目的,请勿在登录页面或任何具有发布请求的网址中禁用令牌。只需在表单字段中添加{{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>