Laravel 5.5手动验证CSRF令牌

时间:2018-02-03 14:34:27

标签: php laravel api laravel-5.5

我正在构建一个api驱动的Laravel 5.5应用程序。我想使用公共访问的api来处理UI驱动的请求。

我的问题是,在我的api auth中间件中,检测UI驱动请求(ajax请求)并允许它通过而不尝试验证api身份验证凭据的最佳方法是什么? (也许尝试验证csrf令牌?)

2 个答案:

答案 0 :(得分:1)

您可以使用中间件为CSRF令牌添加其他检查,尽管Laravel默认在Web路由(Doc)上执行此操作。

例如添加此中间件以防止从ajax以外的任何内容进行访问: 运行此命令:

php artisan make:middleware AllowOnlyAjaxRequests

然后在中间件文件中:         

    namespace App\Http\Middleware;

    use Closure;

    class AllowOnlyAjaxRequests
    {
        /**
        * Handle an incoming request.
        *
        * @param  \Illuminate\Http\Request  $request
        * @param  \Closure  $next
        * @return mixed
        */
        public function handle($request, Closure $next)
        {
            if(!$request->ajax()) {
                // Handle the non-ajax request
                return response('', 405);
            }

            return $next($request);
        }
    }    

然后将'ajax' => \App\Http\Middleware\AllowOnlyAjaxRequests::class,添加到routeMiddleware

中的app/Http/Kernel.php数组中

Middleware Docs

用于检测请求的

是通过ajax发送的,您可以使用$request->ajax()代码。 如果你想排除某些URI来验证CSRF(谨慎行事),你可以this

答案 1 :(得分:0)

您可以从VerifyCsrfToken中间件中检查csrf令牌中排除特定路由。

在验证控制器中的请求时将其排除后,如果$ request-> ajax()返回false,则可以验证csrf令牌。

您可以使用Session :: token()或csrf_token()函数验证csrf。

希望这会对你有所帮助。