2017-04-13 166 views
0

有人可以解释我为什么有时会得到这个错误:TokenMismatchException在VerifyCsrfToken.php线67:Laravel 5.2

TokenMismatchException in VerifyCsrfToken.php line 67: 

in VerifyCsrfToken.php line 67 
at VerifyCsrfToken->handle(object(Request), object(Closure)) 
at call_user_func_array(array(object(VerifyCsrfToken), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 136 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) 
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in ShareErrorsFromSession.php line 49 
at ShareErrorsFromSession->handle(object(Request), object(Closure)) 
at call_user_func_array(array(object(ShareErrorsFromSession), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 136 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) 
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in StartSession.php line 64 
at StartSession->handle(object(Request), object(Closure)) 
at call_user_func_array(array(object(StartSession), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 136 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) 
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in AddQueuedCookiesToResponse.php line 37 
at AddQueuedCookiesToResponse->handle(object(Request), object(Closure)) 
at call_user_func_array(array(object(AddQueuedCookiesToResponse), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 136 

有时它工作正常。我正在使用这样的控制器中的中间件:

$this->middleware(['admin', 'user'], ['only' => [ 
     'show', 
    ]]); 

    $this->middleware('admin', ['only' => [ 
     'index', 
     'store', 
     'create', 
    ]]); 

我没有route.php中的任何中间件,我尝试使用{! csrf_field()!!}和/或{!! csrf_token()!!}在我的表单中,但我仍然有时会得到错误。

这是日志的形式

{!! Form::open(['route'=>'log.store', 'method'=>'POST']) !!} 
           {!! csrf_field() !!} 
           {!! csrf_token() !!} 
           {!!Form::text('user',null,array('placeholder' => 'user'))!!} 
           {!!Form::password('password',array('placeholder' => 'Password'))!!}<br> 
           {!!Form::select('logType', [ 
           'A' => 'A', 
           'E' => 'E', 
           ])!!} 
           {!!Form::submit('Log in',['class'=>'button'])!!} 
          {!!Form::close()!!} 
+0

crsf是一个默认的中间件。你可以粘贴表单元素和输出crsf标记的位置吗? – Gntem

+0

{!! Form :: open(['route'=>'log.store','method'=>'POST'])!!} {!! csrf_field()!} \t \t \t \t \t \t \t \t {!! csrf_token()!} \t \t \t \t \t \t \t \t用户 '))!} \t \t \t \t \t \t \t \t {!!表格::密码(' 密码”,阵列( '占位符'=> '密码'))!}
\t \t \t \t \t \t \t \t {!!表格::选择( 'LOGTYPE',[ \t \t \t \t \t \t \t \t 'A'=> 'A', \t \t \t \t \t \t \t \t 'E'=> 'E', \t \t \t \t \t \t \t \t])!} \t \t \t \t \t \t \t \t {!!表格::提交( '登录',[ '类'=> '按钮'])!} \t \t \t \t \t \t \t {!!形式: :close()!!} – Saucyloco

+0

With'Form :: open'默认情况下添加了CSRF字段,您不需要添加'{!! csrf_field()!!}'之后... –

回答

1

https://laravelcollective.com/docs/5.2/html

一个例子,如果你使用Form ::打开或表格::用POST模型的方法,PUT或DELETE所使用的CSRF令牌Laravel CSRF保护将自动添加到您的表单中作为隐藏字段。

-

{!! Form::open(['route'=>'log.store', 'method'=>'POST']) !!} {!! csrf_field() !!} {!! csrf_token() !!} User'))!!}

尝试更改为

{!! Form::open(['route'=>'log.store', 'method'=>'POST']) !!}

在您提供的令牌呈现3倍的片段,只需检查HTML。只使用Form::open。多次调用和渲染可能会更改该标记,并且最终呈现的元素将覆盖之前的但在会话中它可能没有更改。

也避免发送请求太频繁,因为可能会发生不匹配。

+0

我改变了你说的话。它似乎发生酒糟,但那是它以前的样子,我加了{!! csrf_field()!!}和{!! csrf_token()!!}因为我认为它会修复它。 – Saucyloco

+0

尝试使用调试栏或其他东西进行调试,检查当您呈现页面,会话等时调用的是什么,它会在发生不匹配时提供有用的信息。 – Gntem

相关问题