【问题标题】:Laravel Auth Middleware not Working for POST RouteLaravel Auth 中间件不适用于 POST 路由
【发布时间】:2017-07-04 02:30:50
【问题描述】:

我的站点中有一个简单的表单,我想在用户发布表单之前检查用户当前是否已登录。我已将 auth 中间件放在 post 路由中...

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);
}

这里'login'重定向到我的登录页面。

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

RouteCollection.php 第 219 行中的 MethodNotAllowedHttpException: 在 RouteCollection->methodNotAllowed(array('POST')) 中 RouteCollection.php 第 206 行

表格...

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

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

【问题讨论】:

    标签: php laravel post middleware laravel-middleware


    【解决方案1】:

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

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

    请注意$guard 变量默认为NULL,除非指定。查看您的/config/auth.php 配置以获取可用的警卫。

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

    【讨论】:

    • 'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ],
    • 其实守卫默认是web。您确定要发出 POST 请求 /test 路由吗?将您的 HTML 视图附加到问题中。
    • 我已经添加了。请检查。
    • 确保在表单中传递正确的方法。见我上面的回答。
    • 我解释了它。RouteCollection.php 第 219 行中的 MethodNotAllowedHttpException:在 RouteCollection.php 第 206 行中的 RouteCollection->methodNotAllowed(array('POST'))
    【解决方案2】:

    我知道这个问题是老生常谈了,但您似乎还没有答案。我建议在控制器中使用中间件而不是路由。

    <?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 方法对我来说都很好。

    【讨论】:

      猜你喜欢
      • 2020-11-12
      • 2019-10-05
      • 2017-08-06
      • 2019-06-09
      • 2016-02-02
      • 2016-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多