ОБНОВЛЕНИЕ 2:
Это определенно генерирует целую новую сессию & маркер при выполнении POST. Мои сеансы настроены для хранения в файлах, и я физически вижу, как новый сеанс создается сразу после публикации.
Я до сих пор не могу найти причину для этого. Любая помощь приветствуется!
ОБНОВИТЬ:
При дальнейшем обнаружении проблемы я обнаружил в class VerifyCsrfToken
что проверка выполняется этой строкой кода в protected function tokensMatch($request)
$token = $request->input('_token') ?: $request->header('X-CSRF-TOKEN');
return Str::equals($request->session()->token(), $token);
Я копирую токен из начальной загрузки страницы (и проверяю его значение сеанса), и они совпадают.
Token in session & hidden (login Page first load)= wHszQpffJC0gIov17pd2ZbPqtdbFq7yZh3U2QlOe
Но токены разные, когда POST
имеет место, и они сравниваются. Каким-то образом токен в сеансе был изменен. Я проверяю так:
echo 'Token from request= ' . $token;
echo 'Token from session= ' . $request->session()->token();
и я получаю это:
Token from request= wHszQpffJC0gIov17pd2ZbPqtdbFq7yZh3U2QlOe
Token from session= sfquUx6MhPaqdMR862kDZh8qYmpKDJ0Rbdghq1iA
Я делаю это при новой попытке браузера / авторизации. Почему токен в сеансе отличается от того, который передается через страницу входа?
ОРИГИНАЛ Q:
Я получаю вышеуказанную ошибку при новой установке L5.1 и не могу (после прочтения многочисленных ссылок) решить эту проблему. Я новичок в Laravel. Ценю любые предложения.
Моя форма выглядит так:
@extends('admin.layouts.default')
@section('content')
<div id="form" class="login">
<img src="{{ $logo }}" class="logo"/>
@include('admin.partials.message')
{!! Form::open(['url' => '/login', 'class'=>'form']) !!}
<div class="form-group">
{!! Form::label('email', 'Email:', ['class'=>'control-label']) !!}
{!! Form::email('email', null, ['class'=>'form-control', 'id'=>'email', 'required'=>'1']) !!}
</div>
<div class="form-group">
{!! Form::label('password', 'Password:', ['class'=>'control-label']) !!}
{!! Form::password('password', ['class'=>'form-control', 'id'=>'password', 'required'=>'1']) !!}
</div>
<div class="form-group text-left">
{!! Form::checkbox('remember', '1', null, ['id'=>'remember']) !!}
{!! Form::label('remember', 'Remember Me', ['class'=>'control-label']) !!}
</div>
<div class="form-group">
{!! Form::submit('Sign In', ['class'=>'btn btn-primary']) !!}
<a href="/reset-password" class="text-muted">Forgot Your Password?</a>
</div>
{!! Form::close() !!}
</div>
<?php dd(session()); ?>
@stop
Мои маршруты выглядят так:
/*
|--------------------------------------------------------------------------
| Freely available routes for login, registration, password reset etc
|--------------------------------------------------------------------------
*/
Route::group([
'middleware' => 'guest'
], function(){
// Register
Route::get('register', ['uses' => 'RegistrationController@create', 'as' => 'registration.create']);
Route::post('register', ['uses' => 'RegistrationController@store', 'as' => 'registration.create']);
// Activate
Route::get('register/activate/{uuid}', ['uses' => 'RegistrationController@activate', 'as' => 'registration.activate']); // Pattern matched
// Login/logout
Route::get('login', ['uses' => 'Auth\AuthController@getLogin', 'as' => 'session.create']);
Route::post('login', ['uses' => 'Auth\AuthController@postLogin', 'as' => 'session.create']);
Route::get('logout', ['uses' => 'Auth\AuthController@getLogout', 'as' => 'session.destroy']);
// Forgot password
Route::get('reset-password', ['uses' => 'SessionController@reset_password', 'as' => 'session.reset_password']);
// Change password
Route::get('change-password', ['uses' => 'SessionController@change_password', 'as' => 'session.change_password']);
});
Токен при загрузке страницы и сеансе выглядит одинаково, сгенерированный formBuilder.
сессия:
#attributes: array:1 [▼
"_token" => "EE5qv7mhhyI0cutpXOgU6jgvUR2R58RubQ5pC128"]
HTML страницы:
<input name="_token" type="hidden" value="EE5qv7mhhyI0cutpXOgU6jgvUR2R58RubQ5pC128">
Ну, проблема в том, что я установил переменную сессии secure
в true
в www/config/session.php
файл. Это заставляло Laravel ожидать запросы через HTTPS
что моя среда разработки не настроена, и, таким образом, сервер обрабатывает каждый GET
или же POST
как новый запрос.
Надеюсь, это кому-нибудь поможет.
Других решений пока нет …