Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带REST API的Laravel CSRF保护_Api_Rest_Laravel_Csrf - Fatal编程技术网

带REST API的Laravel CSRF保护

带REST API的Laravel CSRF保护,api,rest,laravel,csrf,Api,Rest,Laravel,Csrf,我在路由文件的顶部有这个代码 Route::when('*', 'csrf', array('post', 'put', 'delete')); 当我测试RESTfulAPI层时,我得到了令牌不匹配错误。如何解决这个问题 我对用户可能执行的常规表单提交使用CSRF保护。但是,对于API来说,这是如何工作的呢?我有我的API调用分组后,我的常规路线如下 Route::group(array('prefix' => 'api'), function () { Route::resource(

我在路由文件的顶部有这个代码

Route::when('*', 'csrf', array('post', 'put', 'delete'));
当我测试RESTfulAPI层时,我得到了令牌不匹配错误。如何解决这个问题

我对用户可能执行的常规表单提交使用CSRF保护。但是,对于API来说,这是如何工作的呢?我有我的API调用分组后,我的常规路线如下

Route::group(array('prefix' => 'api'), function () {
Route::resource('shows', 'ShowsApiController');
Route::resource('episode', 'EpisodesApiController');
Route::resource('genre', 'GenresApiController');
});

<>你应该考虑为你的Web和API层使用不同的中间件组。默认情况下,根据您使用的版本,Laravel使用
web
中间件组

如果您的
routes.php
文件中没有这样的行
Route::group(['middleware'=>'web']),function(){
,那么默认情况下您的laravel版本就是使用它的版本。请检查
RouteServiceProvider.php
文件中的这一行:


如果出现,请在
routes.php
中删除
'middleware'=>'web'
部分和组路由。然后在需要会话、csrf和其他东西的部分使用
web
中间件,在不需要这些东西的部分使用
api
中间件(
api
中间件组不包括会话、加密cookie和csrf验证)。

在您的
应用程序\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/*',
  ];
}

是否有可能在特定控制器中禁用?如果找到解决方案,是否可以关闭/回答此问题?应选择此答案!添加csrf异常是可以的,但这不是处理API的正确方法。为什么这不是执行API的正确方法:cookie将添加到破坏响应的无状态概念中;laravel wil我试着开始会话-浪费一些昂贵的时间;在web组中添加新中间件时,您将需要进行两倍多的测试;如果您考虑节流,最终您将需要迁移到API中间件组。只需我的两分钱。在我看来,您似乎有一个更好的解决方案,但有时人们并不关心“无状态概念”或(此处插入复杂的最佳实践术语),我并不是说它们不好或什么的,但使用小应用不需要让事情变得更复杂。我同意你的看法,让它们简单是至关重要的。但另一个重要的部分是:如果你做的每件事都尽可能简单,那么你就没有提高你的技能。作为一名程序员,我可以说,当我尝试改变一些东西,做一些不同于以往的事情时,我学到了很多东西。干杯!在5.2中添加了,但仍然是api响应VerifyCsrfToken.php第67行中的相同错误
TokenMismatchException: