我有一个似乎在Laravel中重新出现的问题,但我无法修复它。当我尝试使用我的表单登录时,我得到了例外
TokenMismatchException in VerifyCsrfToken.php line 67:
我的代币是
57APQblkHvu9zZAMEdLYqQ1EwhPgZZtv4xEAYqmG // Request
byHXGzrMeMQGPtIBWo6FCgdKyXl2GkiekQk8IEND // Session
但他们为什么不同?我的登录表单如下所示,是视图中唯一的HTML代码。
<form method="post" action="{{ route('login.do') }}">
<input type="submit" value="Login with Spotify">
{{ csrf_field() }}
</form>
我尝试了什么
使用<input type="hidden" name="_token" value="{{ csrf_token() }}">
代替字段。
使用{!! csrf_field() !!}
代替{{ csrf_field() }}
将我的所有路由分组到web
中间件
<?php
Route::group(['middleware' => ['web']], function () {
Route::get(
'/',
[
'as' => 'start',
'uses' => 'HomeController@index'
]
);
Route::get(
'/login',
[
'as' => 'login.show',
'uses' => 'AuthenticationController@login'
]
);
Route::post(
'/login',
[
'as' => 'login.do',
'uses' => 'AuthenticationController@doLogin'
]
);
});
但是一旦我在login.blade.php
(GET请求),然后按提交登录我就会收到上述异常。
答案 0 :(得分:1)
你需要把你的“Route :: post('/ login',......”放在['middleware'=&gt; ['guest']]而不是['middleware'=&gt; [ '卷筒纸']]
在['middleware'=&gt;之外保留所有“登录前活动” ['web']]组,因为['middleware'=&gt; ['web']]执行会话,cookie和csrf等。用户登录laravel web-app后需要处理的东西
答案 1 :(得分:0)
VerifyCsrfToken.php第67行中'TokenMismatchException背后的原因:'可能非常复杂。理解所涉及的中间件是必要的。下图显示了重要的详细信息。Laravel Middleware for token(cookie) verification Diagram
每个请求都遍历StartSession和VerifyXsrfToken层。它们分别管理名为'laravel_session'和'XSRF_token'的cookie。它们按此顺序进行检查,两者都至关重要。如果任一cookie未通过验证,则抛出'TokenMismatchException'。 更多详情请见Full details of Laravel middleware re TokenMismatchException in VerifyCsrfToken