这个错误让我疯了。我正在尝试创建一个检索密码表单,当我提交它时,这个错误会一直被抛出。令牌肯定是提供的,所以我不知道出了什么问题。到目前为止,这只发生在我当地。它不会在生产中发生。同时,不确定它是否相关,我得到
InvalidStateException in AbstractProvider.php line 191
当我尝试使用socialite(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;
}
}
答案 0 :(得分:0)
缺少Csrf令牌,这就是laravel不接受它的原因。将其添加到您的表单中:
{!! Form::open(['method'=>'post', 'action'=>'PasswordRetrieveController@getUser','id'=>'retrieve-pw-form'])!!}
{!! csrf_field() !!}
//...
这将生成一个带有令牌的隐藏输入字段。