默认情况下,Laravel 5似乎将CSRF过滤器应用于所有非获取请求。这对于表单POST是可以的,但对于POST DELETE等的API可能是个问题。
简单问题:
如何设置没有CSRF保护的POST路由?
答案 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/*',
];
}
答案 2 :(得分:2)
我对问题的解决方法:
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 ......
答案 3 :(得分:1)
听听这个。就在30分钟之前,我面临同样的问题。现在它解决了。试试吧。
转到应用 - &gt; HTTP-&GT;内核
打开内核文件。
你可以看到:\ App \ Http \ Middleware \ VerifyCsrfToken :: class,
使用//
禁用此特定代码那就是它!这将有效!
这样你就可以从API调用中删除中间件(如果你愿意的话......)