似乎Laravel 5默认情况下会对所有非获取请求使用CSRF过滤功能. 这对于一个表单的POST来说是可以的, 但是对于一个POST的DELETE等API来说可能是个问题.
简单的问题:
我如何设置一个没有CSRF保护的POST路由?
转到 app/Http/Middleware/VerifyCsrfToken.php
然后在$except数组中输入你的路由(你想禁用csrf令牌的路由)。
例如,你可以通过简单地将URIs添加到CSRF中来排除它们。
class VerifyCsrfToken extends BaseVerifier
{
protected $except = [
'/register'
];
}
您可以将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/*',
];
}
我对问题的破解。
CSRF现在是一个 "中间件",在全球范围内被注册了 App\Http\Kernel.php
. 删除它将默认为没有CSRF保护(Laravel4行为).
要在路由中启用它, 你可以在你的appProvidersRouteServiceProvider.php中创建一个快捷键:
在你的appProvidersRouteServiceProvider.php中创建一个快捷键:
protected $middleware = [
// ....
'csrf' => 'Illuminate\Foundation\Http\Middleware\VerifyCsrfToken',
];
现在你可以在任何路由中启用它:
$router->post('url', ['middleware' => 'csrf', function() {
...
}]);
这不是最优雅的解决方案, IMO...
听听这个吧。就在30分钟之前,我也面临同样的问题。现在它解决了。只是试试这个。
Goto App -> HTTP-> Kernel(内核)
打开内核文件。
在那里你可以看到。\App/Http/Middleware/VerifyCsrfToken::class。
只需使用/禁用这个特定的代码
就是这样!这将工作!
这样你就可以从API调用中移除中间件(如果你想这样的话...