Laravel 5-TokenMismatchException в строке 53 VerifyCsrfToken.php: SOS CALL

Эта ошибка сводит меня с ума. Я пытаюсь создать форму для восстановления пароля, и эта ошибка продолжает появляться, когда я ее отправляю. Токен определенно предоставляется, поэтому я не знаю, что не так. Пока это происходит только на моем локальном. На производстве так не бывает. И в то же время, не уверен, что это связано, я получаю

InvalidStateException in AbstractProvider.php line 191 

когда я пытаюсь войти в социальную сеть (google и fb). Одно имеет тенденцию происходить, когда происходит другое. Если я получаю tokenMismatch при отправке формы, а затем пытаюсь войти в систему, я получаю эту ошибку.

Хотя бы вот форма. Мне очень нужна помощь здесь

{!! Form::open(['method'=>'post', 'action'=>'PasswordRetrieveController@getUser','id'=>'retrieve-pw-form'])!!}


    <div class='form-group'>
        {!! form::label('email','Email Address')!!}
    {!!Form::text('email','',['class'=>'form-control','type'=>'email','required'=>'required'])!!}

   </div>

{!!Form::submit('submit',['class'=>'btn btn-md btn-default'])!!}
{!!Form::close()!!}

Вот контроллер. Он никогда не попадает в мою функцию getUser. Просто выдает ошибку tokenMismatch.

<?php
namespace App\Http\Controllers;

use App\User;
use App\SecurityQuestions;
use Mail;
use Redirect;
use Illuminate\Http\Response;
use Illuminate\Http\Request;

class PasswordRetrieveController extends Controller{

public function index(){
    return view('password.index');
}

public function getUser(Request $request){
    $email = $request->get('email');
    $user = User::where('email',$email)->first();
    if ($user == null){
        return Redirect::back()->with('message','This email does not exist');
    }
    if(($user->password == null) && (!empty($user->provider))){
        return Redirect::back()->with('message','A password for this email does not exist. Log back in with facebook or google');
    }
    else{
        $tmp_pw = $this->generate_tmp_pw($user);

    return Redirect('password.security_question_1');
    }
}

public function security_questions(){
    echo 1 ;exit;
}

private function generate_tmp_pw($user){
    $tmp_pw= str_random(10);

    $user->tmp_password = $tmp_pw;
    $user->save();
    return $tmp_pw;
}

}

person jackjoesmith    schedule 31.10.2015    source источник
comment
Вы написали, вы предоставляете токен, но я не вижу его в вашей форме. Странно, что это работает на производстве, включено ли промежуточное программное обеспечение проверки csrf на рабочем сайте? Кстати, написал ответ.   -  person Iamzozo    schedule 31.10.2015


Ответы (1)


Токен Csrf отсутствует, поэтому laravel не принимает его. Добавьте его в форму:

{!! Form::open(['method'=>'post', 'action'=>'PasswordRetrieveController@getUser','id'=>'retrieve-pw-form'])!!}

    {!! csrf_field() !!}

    //...

Это создаст скрытое поле ввода с токеном в нем.

person Iamzozo    schedule 31.10.2015
comment
Токен уже сгенерирован, когда я использую Form::open. Токен имени ввода и значение все есть, когда я проверяю элемент проверки - person jackjoesmith; 31.10.2015