【问题标题】:Laravel 5.4 post request token mismatchLaravel 5.4 发布请求令牌不匹配
【发布时间】:2017-07-15 21:43:16
【问题描述】:

我正在学习在 Laravel 中创建 API。我创建了一个 CRUD 控制器,并且我有一个空存储功能:

public function store(Request $request)
{
    dd('store');
}

当我尝试使用 Postman 发出发布请求时,我得到了令牌不匹配异常:

"Illuminate\Session\TokenMismatchException">TokenMismatchException in
   "/Users/andrei/Desktop/api.dev/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php line 68">VerifyCsrfToken.php line 68

我没有用于 post 方法的表单来放置 {{csrf.. }}。如何解决?谢谢!

【问题讨论】:

标签: php laravel api laravel-5


【解决方案1】:

对于 API,您应该使用 VerifyCsrfToken 中间件中的 $except 属性将它们从 CSRF 中排除。

【讨论】:

  • 如果我的路由是 localhost:8000/api/v1/lessons 我应该在 $except 变量中添加什么?
  • 我会做这样的事情来排除所有包含api/的路由:protected $except = [ 'api/*' ];
  • 这解决了我的问题!因为我会得到更多的评价,所以我会投票
【解决方案2】:

如果您使用表单提交,您必须使用{{ csrf_field() }},它将被呈现为<input type='hidden' name='_token' value="tokenvalueofcharsans numbers" />。但是如果你只是发送 ajax 请求并且你不能在你的请求中设置{{ csrf_field() }},你必须:
1- 通过在app/Http/Middleware/VerifyCsrfToken 中间件的$except 变量中添加您的网址,将您的网址从csrf 验证中排除。
2- 找到一种方法来验证 csrf 不会在此轨道中受到影响。

【讨论】:

  • 例如,如果我有路由:localhost:8000/api/v1/lessons for post,我在 $except 中放什么?
  • 把你在App/Http/routes.php里的url路由写成Route::post('**yourroute**', 'YourController@yourMethod')。提到的yourroute
猜你喜欢
  • 1970-01-01
  • 2017-10-24
  • 1970-01-01
  • 1970-01-01
  • 2017-01-25
  • 2015-12-20
  • 2014-11-04
  • 1970-01-01
  • 2015-01-02
相关资源
最近更新 更多