11

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

简单的问题:

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

4

4 回答 4

20

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

例如:

class VerifyCsrfToken extends BaseVerifier
{

    protected $except = [

        '/register'

    ];
}
于 2015-12-10T11:34:02.203 回答
10

您可以通过简单地将 URI 添加到中间件的$except属性VerifyCsrfTokenapp/Http/Middleware/VerifyCsrfToken.php)中来从 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

于 2015-10-02T07:57:13.420 回答
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() {
     ... 
    }]);
    

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

于 2014-11-18T11:36:08.030 回答
0

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

转到应用程序-> HTTP-> 内核

打开内核文件。

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

只需使用 // 禁用此特定代码

就这样!这会奏效!

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

于 2015-10-19T10:32:30.400 回答