Laravel 5: 不需要CSRF检查的POST功能

问题描述 投票:7回答:4

似乎Laravel 5默认情况下会对所有非获取请求使用CSRF过滤功能. 这对于一个表单的POST来说是可以的, 但是对于一个POST的DELETE等API来说可能是个问题.

简单的问题:

我如何设置一个没有CSRF保护的POST路由?

csrf laravel-5
4个回答
13
投票

转到 app/Http/Middleware/VerifyCsrfToken.php 然后在$except数组中输入你的路由(你想禁用csrf令牌的路由)。

例如,你可以通过简单地将URIs添加到CSRF中来排除它们。

class VerifyCsrfToken extends BaseVerifier
{

    protected $except = [

        '/register'

    ];
}

6
投票

您可以将URI从CSRF中排除,只需将它们添加到$except数组中。$except 的财产 VerifyCsrfToken 中间件(appHttpMiddlewareVerifyCsrfToken.php。):

<?php

namespace App\Http\Middleware;

use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier;

class VerifyCsrfToken extends BaseVerifier
{
    /**
     * The URIs that should be excluded from CSRF verification.
     *
     * @var array
     */
    protected $except = [
        'api/*',
    ];
}

文档: http:/laravel.comdocs5.1routing#csrf-protection


2
投票

我对问题的破解。

CSRF现在是一个 "中间件",在全球范围内被注册了 App\Http\Kernel.php. 删除它将默认为没有CSRF保护(Laravel4行为).

要在路由中启用它, 你可以在你的appProvidersRouteServiceProvider.php中创建一个快捷键:

  1. 在你的appProvidersRouteServiceProvider.php中创建一个快捷键:

    protected $middleware = [
      // ....
      'csrf'  => 'Illuminate\Foundation\Http\Middleware\VerifyCsrfToken',
    ];
    
  2. 现在你可以在任何路由中启用它:

    $router->post('url', ['middleware' => 'csrf', function() {
     ... 
    }]);
    

这不是最优雅的解决方案, IMO...


2
投票

听听这个吧。就在30分钟之前,我也面临同样的问题。现在它解决了。只是试试这个。

Goto App -> HTTP-> Kernel(内核)

打开内核文件。

在那里你可以看到。\App/Http/Middleware/VerifyCsrfToken::class。

只需使用/禁用这个特定的代码

就是这样!这将工作!

这样你就可以从API调用中移除中间件(如果你想这样的话...

© www.soinside.com 2019 - 2024. All rights reserved.