My $request->input(_token) is a mismatch of $request->session()->toke() when switching from file to database sessions.
This is causing a CSRF TokenMismatchException. When switching back from database to file sessons driver the mismatch does not occur.
Does anyone know why i get this mismatch and possibly how to resolve it? :)
What i have done:
Using Laravel 5.0
PHP 5.6.30
php artisan session:table : Created Laravel session table
composer dump-autoload
php artisan config:clear
php arisan config:cache
My session.php config looks like this:
return [
'driver' => 'database',
'lifetime' => 120,
'expire_on_close' => false,
'encrypt' => false,
'files' => storage_path().'/framework/sessions',
'connection' => null,
'table' => 'laravel_session',
'lottery' => [2, 100],
'cookie' => 'laravel_session',
'path' => '/',
'domain' => null,
'secure' => false,
];
VerifyCsrfToken IlluminateFoundationMiddleware
protected function tokensMatch($request)
{
$tok = $request->input('_token') ; //4ExGXl9mRM75d7brfQhgIWcQzsSVjnUHDoDcKJxp
$tokhead = $request->header('X-CSRF-TOKEN');
$sessToken = $request->session()->token();//57DLb3uTs8brVPKpBxor14Hg0ZvQPpYW3flktP86
$token = $request->input('_token') ?: $request->header('X-CSRF-TOKEN');
if ( ! $token && $header = $request->header('X-XSRF-TOKEN'))
{
$token = $this->encrypter->decrypt($header);
}
return StringUtils::equals($request->session()->token(), $token);
Database table is populated with data after switching to database sesseio driver:
SELECT id, payload, last_activity, user_id FROM kartserver_2.laravel_session;
d33d5782e1eed56771baa56f9410a24b9e628ff6 YToxNzp7czo2OiJfdG9rZW4iO3M6NDA6Ikh6dUc4WG1PUDFZalRHY0QwcW5QZzlFSGRUSkJ3ZmVOUkVjM0RJVk0iO3M6NToiZmxhc2giO2E6Mjp7czozOiJvbGQiO2E6MDp7fXM6MzoibmV3IjthOjA6e319czoyMDoicGFzc3dvcmRSZXF1aXJlbWVudHMiO086NDE6Ikhhd2tTb2Z0d2FyZVxTZWN1cml0eVxQYXNzd29yZFJlcXVpcmVtZW... 1487315670 1862
I am generating csrf_tokens in html
<input type="hidden" name="_token" id="_token" value="{!! csrf_token() !!}">
See Question&Answers more detail:
os