在laravel中找不到CSRF令牌

时间:2018-01-10 08:45:06

标签: laravel csrf

我收到这个CSRF令牌错误,当我环顾四周时,只是说我需要的是在提交数据时使用{{csrf_field()}}。在过去,它工作正常,但一段时间后,我收到此错误,我无法提交我的数据,甚至根本无法编辑我的数据。有人可以帮助我,谢谢。

enter image description here

请告诉我哪里出错了?我想在这做什么

edit.blade.php(这是csrf部分)

        <form class="form-horizontal" method="post" action="{{ url('/user/show/'.$object->id) }}">

          {{ method_field('PUT')  }}
          {{ csrf_field() }}

         <div class="input-group">
            <label><b>Name/NRIC:</b></label>
              <input type="text" name="Name" value="{{ $object->Name }}" class="form-control">
        </div>
</form>

app.js(laravel默认不是我的,这是我看到的)

/**
 * We'll load the axios HTTP library which allows us to easily issue requests
 * to our Laravel back-end. This library automatically handles sending the
 * CSRF token as a header based on the value of the "XSRF" token cookie.
 */

window.axios = __webpack_require__(16);

window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';

/**
 * Next we will register the CSRF Token as a common header with Axios so that
 * all outgoing HTTP requests automatically have it attached. This is just
 * a simple convenience so we don't have to attach every token manually.
 */

var token = document.head.querySelector('meta[name="csrf-token"]');

if (token) {
  window.axios.defaults.headers.common['X-CSRF-TOKEN'] = token.content;
} else {
  console.error('CSRF token not found: https://laravel.com/docs/csrf#csrf-x-csrf-token');
}

修改 不确定这是否相关,但由于它是登录部分,只是想知道它是否会影响这一点。

我实际上有2个app.blade.php用于布局,所以想知道导致这整个问题的原因是什么?

5 个答案:

答案 0 :(得分:3)

转到您的主刀片或app.blade.php,并确保添加此内容:

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

答案 1 :(得分:3)

您需要将其添加到头标记

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

此错误将不再显示。

有关详细信息,请转到here了解详情

答案 2 :(得分:0)

表单的开始和结束

{!!
    Form::
    open(
    array(
    'id'=>'FormIF',
    'name'=>'FormName',
    'autocomplete'=>'off' ,
    'url' =>route('route_to_post_method')
    )
    )
    !!}

//Form Body

{!! Form::close() !!}

答案 3 :(得分:0)

打开检查器,确保将meta标签放在head中。 如果您发现meta放在body中,那么您可能会在部分脚本中包括超出部分字段的脚本,则必须将其包括到部分字段中。

@extends('app')
@section('content')
@include('sidebar')

答案 4 :(得分:0)

您要做的就是检查生成的HTML文件ctrl+U。您会注意到,HTML <head>标记可能位于body标记内。如果您没有正确设置布局刀片部分,则会发生这种情况。

此之前发生在我

@extends('layouts.main-layout')
  <h1>Laravel Project</h1> <--This will break the **generated template**
@section('content')
    <div id="app"></div>
@endsection

<h1>将破坏模板,您将在控制台中看到 CSRF令牌错误。