【发布时间】:2015-01-15 13:22:01
【问题描述】:
似乎 Laravel 5 默认将 CSRF 过滤器应用于所有非获取请求。这对于表单 POST 来说是可以的,但对于 POST DELETE 等 API 来说可能是个问题。
简单的问题:
如何设置没有 CSRF 保护的 POST 路由?
【问题讨论】:
-
表示保护被解除。最好将令牌作为 API 调用的一部分传递。 (我知道这是一个老问题,只是警告新访客)
似乎 Laravel 5 默认将 CSRF 过滤器应用于所有非获取请求。这对于表单 POST 来说是可以的,但对于 POST DELETE 等 API 来说可能是个问题。
简单的问题:
如何设置没有 CSRF 保护的 POST 路由?
【问题讨论】:
我对这个问题的破解:
CSRF 现在是在App\Http\Kernel.php 中全局注册的“中间件”。删除它将默认没有 CSRF 保护(Laravel4 行为)。
在路由中启用它:
在您的 app/Providers/RouteServiceProvider.php 中创建一个速记键:
protected $middleware = [
// ....
'csrf' => 'Illuminate\Foundation\Http\Middleware\VerifyCsrfToken',
];
您现在可以将其启用到任何路线:
$router->post('url', ['middleware' => 'csrf', function() {
...
}]);
不是最优雅的解决方案 IMO...
【讨论】:
您可以从 CSRF 中排除 URI,只需将它们添加到 VerifyCsrfToken 中间件的 $except 属性(app/Http/Middleware/VerifyCsrfToken.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/*',
];
}
【讨论】:
只要听听这个。就在 30 分钟之前,我遇到了同样的问题。现在它解决了。试试这个。
转到应用程序 -> HTTP-> 内核
打开内核文件。
在那里你可以看到:\App\Http\Middleware\VerifyCsrfToken::class,
只需使用 //
禁用此特定代码就是这样!这会奏效!
这样您就可以从 API 调用中删除中间件(如果您愿意的话..)
【讨论】:
转到app/Http/Middleware/VerifyCsrfToken.php,然后在 $except 数组中输入您的路线(您要为其禁用 csrf 令牌)。
例如:
class VerifyCsrfToken extends BaseVerifier
{
protected $except = [
'/register'
];
}
【讨论】: