Vij*_*ath 8 api rest csrf laravel
我在路由文件的顶部有这个代码
Route::when('*', 'csrf', array('post', 'put', 'delete'));
Run Code Online (Sandbox Code Playgroud)
当我测试我的RESTful API层时,我得到令牌不匹配错误.怎么解决这个?
我将CSRF保护用于用户可能执行的常规表单提交.但是如何为API工作呢?我的API调用按照常规路由分组,如下所示
Route::group(array('prefix' => 'api'), function () {
Route::resource('shows', 'ShowsApiController');
Route::resource('episode', 'EpisodesApiController');
Route::resource('genre', 'GenresApiController');
});
Run Code Online (Sandbox Code Playgroud)
在你的 App\Http\Middleware\VerifyCsrfToken
你将有这样一个班级,将你的路线添加到$除外
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier;
class VerifyCsrfToken extends BaseVerifier
{
protected $except = [
'shows/*',
'episode/*',
'genre/*',
];
}
Run Code Online (Sandbox Code Playgroud)
您应该考虑为Web和api层使用不同的中间件组.默认情况下,Laravel根据您使用的版本使用web中间件组.
如果你是不是有这样的线Route::group(['middleware' => 'web'], function () {在你的routes.php文件,然后你laravel版本是一个在默认情况下使用它.检查RouteServiceProvider.php此行的文件:https://github.com/laravel/laravel/blob/master/app/Providers/RouteServiceProvider.php#L56.
如果出现,请删除'middleware' => 'web'部分和分组路线routes.php.然后将web中间件用于需要会话,csrf和其他东西的部分,并使用api不需要这些东西的api中间件(中间件组不包括会话,加密cookie和csrf验证).
| 归档时间: |
|
| 查看次数: |
8518 次 |
| 最近记录: |