繁体   English   中英

laravel 5.1 auth csrf令牌不匹配

[英]laravel 5.1 auth csrf token mismatch

在做出任何判断之前,我先阅读了与我的问题有关的所有相关问题,但都没有解决它。 所以这是我的问题,当我使用laravel 5.1的身份验证工具并想要注册用户时,csrf令牌会在我请求显示我的注册表单时生成两次,而在我将表单数据发布到auth / register发布路由时会生成一个,因此我收到一个CSRF令牌不匹配异常。 这是我的注册表格标记

<form method="POST" action="/auth/register" class="ui large form">
    {!! csrf_field() !!}
  <div class="two fields dirright alignright">      
    <div class="field" >          
      <div class="ui right icon input">
        <i class="user icon"></i>
        {!! Form::text(
          'first_name',
          Input::old('first_name'),
          array(
            'class' => 'dirright alignright fontfamily',
            'placeholder' => 'نام'
          )
        ) !!}
      </div>
    </div>
    <div class="field" >          
      <div class="ui right icon input">
        <i class="user icon"></i>
        {!! Form::text(
          'last_name',
          Input::old('last_name'),
          array(
            'class' => 'dirright alignright fontfamily',
            'placeholder' => 'نام خانوادگی'
          )
        ) !!}
      </div>
    </div>
  </div>
  <div class="field">
    <div class="ui left icon input latintext">
      <i class="mail icon"></i>
      {!! Form::email(
        'email',
        Input::old('email'),
        array(
          'class' => 'latintext',
          'placeholder' => 'E-mail address'
        )
      ) !!}
    </div>
  </div>  
  <div class="field">
    <div class="ui left icon input latintext">
      <i class="lock icon"></i>
      {!! Form::password(
        'password',
        Input::old('password'),
        array(
          'class' => 'latintext',
          'placeholder' => 'Password'
        )
      ) !!}
    </div>
  </div>
  <div class="ui fluid large primary submit button">ثبت نام</div>
  <div class="ui error message alignright"></div>
  </form>

只需按以下形式添加csrf令牌:

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

它为我工作。

假设您的Web服务器已经具有对会话目录的写权限,在我的情况下为'app / storage / framework / sessions /'

执行:

$ rm -f {your_web_app}/storage/framework/sessions/*

有几种可能性...

1)如果您的<?php标签前没有任何空格,则可能导致此错误(尤其是在使用AJAX的情况下)。 因此,只需仔细检查以确保文件中的<?php之前没有任何内容。

2)如果您尝试通过AJAX提交此表单数据,则文档建议像下面这样传递CSRF令牌:

将此元标记添加到您的<head>

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

然后在AJAX调用中执行此操作:

$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
});

如果您使用laravel 5.1,只需添加{{ csrf_field() }}就可以解决问题

如果您使用Form的打开和关闭标签,csrf令牌将自动添加

{!! Form::open(['action' => '/auth/register', 'class' => 'ui large form']) !!}

-- Form stuff here --

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

我希望这个能帮上忙

设置元标记,如下所示

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

然后要求如下

$.ajax({
    data: {data1:'data1',data2:'data2'},
    url: '/your/url/goes/here',
    type: 'POST',
    beforeSend: function (request) {
        return request.setRequestHeader('X-CSRF-Token', $("meta[name='csrf-token']").attr('content'));
    },
    success: function(response){
        console.log(response);
    }
})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM