我的路线文件
顶部有此代码Route::when('*', 'csrf', array('post', 'put', 'delete'));
当我测试我的RESTful API层时,我得到令牌不匹配错误。怎么解决这个?
我将CSRF保护用于用户可能执行的常规表单提交。但是如何为API工作呢?我将我的API调用分组到我的常规路由之后,如下所示
Route::group(array('prefix' => 'api'), function () {
Route::resource('shows', 'ShowsApiController');
Route::resource('episode', 'EpisodesApiController');
Route::resource('genre', 'GenresApiController');
});
答案 0 :(得分:7)
在App\Http\Middleware\VerifyCsrfToken
您将拥有这样一个班级,将您的路线添加到$ except
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier;
class VerifyCsrfToken extends BaseVerifier
{
protected $except = [
'shows/*',
'episode/*',
'genre/*',
];
}
答案 1 :(得分:5)
您应该考虑为您的web和api层使用不同的中间件组。默认情况下,Laravel根据您使用的版本使用web
中间件组。
如果您的Route::group(['middleware' => 'web'], function () {
文件中没有此routes.php
行,那么您的laravel版本是默认使用它的版本。检查RouteServiceProvider.php
这个行的'middleware' => 'web'
文件:https://github.com/laravel/laravel/blob/master/app/Providers/RouteServiceProvider.php#L56。
如果出现,请移除routes.php
部分并在web
中对自己的路线进行分组。然后使用api
中间件作为您需要会话,csrf和其他内容的部分,并使用api
中间件,您不需要这些内容(a:visited
中间件组不包含会话,加密的cookie和csrf验证)。