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 73

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 Безопасность Защищая Маршруты