Laravel 5:没有CSRF检查的POST

时间:2014-11-18 11:11:04

标签: csrf laravel-5

默认情况下,Laravel 5似乎将CSRF过滤器应用于所有非获取请求。这对于表单POST是可以的,但对于POST DELETE等的API可能是个问题。

简单问题:

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

4 个答案:

答案 0 :(得分:12)

转到app/Http/Middleware/VerifyCsrfToken.php,然后在$ except数组中输入要为其禁用csrf令牌的路由。

例如:

class VerifyCsrfToken extends BaseVerifier
{

    protected $except = [

        '/register'

    ];
}

答案 1 :(得分:5)

您只需将它们添加到$except中间件( app / Http / Middleware / VerifyCsrfToken.php )的VerifyCsrfToken属性中,即可从CSRF中排除URI:

<?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.com/docs/5.1/routing#csrf-protection

答案 2 :(得分:2)

我对问题的解决方法:

CSRF现在是App\Http\Kernel.php全球注册的“中间件”。删除它将默认不具有CSRF保护(Laravel4行为)。

在路线中启用它:

  1. 在app / Providers / RouteServiceProvider.php中创建一个简写密钥:

    protected $middleware = [
      // ....
      'csrf'  => 'Illuminate\Foundation\Http\Middleware\VerifyCsrfToken',
    ];
    
  2. 您现在可以将其启用到任何路线:

    $router->post('url', ['middleware' => 'csrf', function() {
     ... 
    }]);
    
  3. 不是最优雅的解决方案IMO ......

答案 3 :(得分:1)

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

转到应用 - &gt; HTTP-&GT;内核

打开内核文件。

你可以看到:\ App \ Http \ Middleware \ VerifyCsrfToken :: class,

使用//

禁用此特定代码

那就是它!这将有效!

这样你就可以从API调用中删除中间件(如果你愿意的话......)