Laravel Auth中间件不适用于POST路由

时间:2017-02-15 12:18:54

标签: php laravel post middleware laravel-middleware

我的网站中有一个简单的表单,我想在发布表单之前检查用户当前是否已登录。我把auth中间件放在了后期路线......

Route::post('test','SellController@test_mid')->middleware('auth');

我的身份验证中间件...

<?php

public function handle($request, Closure $next, $guard = null)
{
    if (Auth::guard($guard)->guest()) {
        if ($request->ajax() || $request->wantsJson()) {
            return response('Unauthorized.', 401);
        } else {
            return redirect()->guest('login');
        }
    }

    return $next($request);
}

此处&#39;登录&#39; 重定向到我的登录页面。

问题出在我点击登录按钮后,错误是......

  

RouteCollection.php第219行中的MethodNotAllowedHttpException:   at RouteCollection-&gt; methodNotAllowed(array(&#39; POST&#39;))in   RouteCollection.php第206行

...表格

{{ Form::open(array('url'=>"/test")) }}=
    <input type="submit" value="submit">
{{ Form::close() }}

但是,如果我在 GET 路由上设置auth中间件,它可以正常工作。如果是 GET ,如果我已退出,则会将我引导至登录页面。在我提供登录凭据并点击登录按钮后,它会引导我进入所需的 GET 路线。

2 个答案:

答案 0 :(得分:0)

确保您的视图表单使用POST方法。

{{Form::open(array('url'=>'/test', 'method'=>'post'))}}

请注意,除非另有说明,否则$guard变量默认为NULL。有关可用的警卫,请参阅/config/auth.php配置。

Route::post('test', 'SellController@test_mid')->middleware('auth:web'); 

答案 1 :(得分:0)

我知道这个问题是个老故事,但看来您还没有答案。我建议在控制器内部使用中间件而不是路由。

<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Auth;
use Illuminate\Http\Request;

class YourController extends Controller
{

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

    public function yourFunction(Request $request){
      // your action
    }
}

对于我来说,无论是GET还是POST方法,它都很好。