【问题标题】:How to fix Laravel token mismatch CSRF error如何修复 Laravel 令牌不匹配 CSRF 错误
【发布时间】:2019-10-06 05:59:24
【问题描述】:

在我在 Laravel 的一个项目中,我实现了 CRUD 功能,并且在每个功能的视图中,我根据功能放置了一个 csrf 令牌和一个请求,即 PUT 用于更新某些内容。不幸的是,我有两个问题。似乎将@csrf 和@method(PUT) 放在html 页面上的纯文本中,而不是实际将各自的功能添加到页面中。例如,在编辑页面上,当我尝试编辑数据库中的现有条目时,会出现令牌不匹配异常错误,我不知道为什么。

在控制器中编辑操作:

public function update(Request $request, $id)
{
    $blog = Blog::find($id);
    $blog->title = $request->title;
    $blog->content = $request->content;
    $blog->update();

    return redirect()->route('blog_path', ['blog' => $blog]);
}

edit.blade.php 上的表单:

<form action="{{ route('update_blog_path', ['blog' => $blog->id]) }}" method="POST">
  <input type="hidden" name="_method" value="PUT">
  @csrf

  @method('PUT')

  <div class="form-group">
    <label for="title">Title</label>
    <input type="text" name="title" class="form-control" value="{{ $blog->title}}">
  </div>

  <div class="form-group">
    <label for="content">Content</label>
    <textarea name="content" rows="10" class="form-control">{{$blog->content}}</textarea>
  </div>

  <div class="form-group">
    <button type="submit" class="btn btn-outline-primary">Edit Blog Post</button>
  </div>
</form>

令牌不匹配错误也不允许我使用标准 Laravel 身份验证登录和注册,所以我想知道解决这个错误是否是一个简单的修复程序,或者是否还有其他问题?

【问题讨论】:

  • 你使用的是什么版本的 Laravel? @csrf 在 5.6+ 中可用
  • 我正在使用最新版本的 Laravel 5.8
  • 您的&lt;head&gt; 部分中是否还有一个 CSRF 字段,如果有,请尝试删除一个。
  • 刚刚尝试通过添加隐藏字段&lt;input type="hidden" name="_token" value="{{ csrf_token() }}"&gt; 来修复它,但它出现了一个新错误,即MethodNotAllowedHttpException。现在好像我的路线没有设置为允许 POST。
  • 您的路线应该是Route::put 而不是Route::post

标签: php laravel


【解决方案1】:

解决方案 #1 - 添加此元标记:

<meta name="csrf-token" content="{{ csrf_token() }}">

解决方案 #2 - 像这样添加隐藏输入:

<input type="hidden" name="_token" value="{{ csrf_token() }}">

【讨论】:

猜你喜欢
  • 2022-08-19
  • 2017-06-06
  • 1970-01-01
  • 2021-08-18
  • 2021-10-22
  • 2021-03-16
  • 2020-07-08
  • 2016-12-10
  • 2016-09-20
相关资源
最近更新 更多