2015-08-14 8 views
0

прежде чем принимать какие-либо суждения Я прочитал все связанные с этим вопросы, связанные с моей проблемой, но никто из них не исправил это. , вот моя проблема, когда я использую средство проверки подлинности laravel 5.1 и хочу зарегистрировать пользователя, который токен csrf генерирует дважды, когда я запрашиваю, чтобы показать свою регистрационную форму, и один, когда я отправляю данные формы в auth/register post route, и это заставьте мое получить исключение несоответствия токенов csrf. вот мой регистр форма разметкиlaravel 5.1 auth csrf token несоответствие

<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> 
+0

Вы должны размещать более о том, как вы отправите форму (JS сниппет), форма HTML выглядит нормально. – yangqi

+0

Я знаю, что это сообщение стареет, но он появился первым в моем поиске Google. У меня была проблема, когда токен был недействительным, и я не мог понять, почему. Проблема для меня заключалась в том, что был javascript-код, который устанавливал входные данные формы для отключенных. Сценарий js также отмечал поле _token как отключенное, поэтому его не отправляли вместе с POST. Надеюсь, это полезно кому-то другому. – Sarcastron

ответ

0

Есть несколько возможностей ...

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') 
    } 
}); 
+0

нет Я не отправляю его через ajax, но о теге открытия

1

Просто добавьте маркер CSRF следующим образом в виде:

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

это сработало для меня.

0

Если с помощью Laravel 5,1 просто добавляя {{ csrf_field() }} бы сделать трюк

0

токен CSRF будет добавлен автоматически, если вы используете открывать и закрывать тег для формы

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

-- Form stuff here -- 

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

я надеюсь, что это поможет

набор мета-тегов, как следует

<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); 
    } 
}) 
1

Предположим, что ваш веб-сервер уже доступ на запись к каталогу сессии, в моем случае «приложение/хранение/каркасные/сессий /».

Execute:

$ rm -f {your_web_app}/storage/framework/sessions/* 
Смежные вопросы