Laravel - хранилище сеансов не устанавливается по запросу
недавно я создал новый проект Laravel и следовал вдоль руководства по аутентификации. Когда я посещаю свой логин или регистрирую маршрут, я получаю следующую ошибку:
ErrorException in Request.php line 775:
Session store not set on request. (View: C:UsersMatthewDocumentstestresourcesviewsauthregister.blade.php)
Я не редактировал никаких основных файлов Laravel, я только создал представления и добавил маршруты к моим маршрутам.файл php
// Authentication routes
Route::get('auth/login', ['uses' => 'AuthAuthController@getLogin', 'as' => 'login']);
Route::post('auth/login', ['uses' => 'AuthAuthController@postLogin', 'as' => 'login']);
Route::get('auth/logout', ['uses' => 'AuthAuthController@getLogout', 'as' => 'logout']);
// Registration routes
Route::get('auth/register', ['uses' => 'AuthAuthController@getRegister', 'as' => 'register']);
Route::post('auth/register', ['uses' => 'AuthAuthController@postRegister', 'as' => 'login']);
у меня нет большого опыта работы с Laravel, поэтому, пожалуйста, простите мое невежество. Я знаю, что есть еще один вопрос, это то же самое, но ни ответов, кажется, работает для меня. Спасибо за чтение!
Edit:
вот мой реестр.лезвие.php по запросу.
@extends('partials.main')
@section('title', 'Test | Register')
@section('content')
<form method="POST" action="/auth/register">
{!! csrf_field() !!}
<div class="ui input">
<input type="text" name="name" value="{{ old('name') }}" placeholder="Username">
</div>
<div class="ui input">
<input type="email" name="email" value="{{ old('email') }}" placeholder="Email">
</div>
<div class="ui input">
<input type="password" name="password" placeholder="Password">
</div>
<div class="ui input">
<input type="password" name="password_confirmation"placeholder="Confirm Password">
</div>
<div>
<button class="ui primary button" type="submit">Register</button>
</div>
</form>
@endsection
8 ответов:
вам понадобится web middleware Если вам нужно состояние сеанса, защита CSRF и многое другое.
Route::group(['middleware' => ['web']], function () { // your routes here });
если добавить ваш
routes
внутриweb middleware
не работает по какой-либо причине, то попробуйте добавить это$middleware
наKernel.php
protected $middleware = [ //... \Illuminate\Session\Middleware\StartSession::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class, ];
в моем случае (используя Laravel 5.3) добавление только следующих 2 промежуточных программ позволило мне получить доступ к данным сеанса в моих маршрутах API:
\App\Http\Middleware\EncryptCookies::class
\Illuminate\Session\Middleware\StartSession::class
все декларации (
$middlewareGroups
в ядре.php):'api' => [ \App\Http\Middleware\EncryptCookies::class, \Illuminate\Session\Middleware\StartSession::class, 'throttle:60,1', 'bindings', ],
если ответ Cas Bloem не применяется (т. е. у вас определенно есть
web
промежуточное на соответствующем маршруте), вы, возможно, захотите, чтобы проверить порядок middlewares в ядре протокола HTTP.порядок по умолчанию в
Kernel.php
это:$middlewareGroups = [ 'web' => [ \App\Http\Middleware\EncryptCookies::class, \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, \Illuminate\Session\Middleware\StartSession::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class, \App\Http\Middleware\VerifyCsrfToken::class, ], ];
отметим, что
VerifyCsrfToken
послеStartSession
. Если вы получили их в другом порядке, зависимость между ними также может привести кSession store not set on request.
исключения.
Laravel [5.4]
мое решение было использовать global session helper: session ()
его функциональность немного сложнее, чем $ request - > session ().
писать:
session(['key'=>'value']);
толкал:
session()->push('key', $notification);
извлечение:
session('key');
Если вы используете CSRF введите
'before'=>'csrf'
в вашем случае
Route::get('auth/login', ['before'=>'csrf','uses' => 'Auth\AuthController@getLogin', 'as' => 'login']);
для получения более подробной информации просмотрите документацию Laravel 5 Безопасность Защищая Маршруты