如何修复Laravel代币不匹配的CSRF错误



在我在Laravel的一个项目中,我实现了CRUD功能,并且在每个功能的视图中,我都将CSRF令牌和请求取决于该功能,即更新某些功能。不幸的是,我有两个问题。它似乎可以将@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身份验证注册,因此我想知道这是否是解决此错误的简单解决方案,还是还有更多的问题?

解决方案#1-添加此meta标签:

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

解决方案#2-添加隐藏的输入:

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

最新更新