Laravel 7 Магазин сессий не установлен по запросу - PullRequest
1 голос
/ 09 мая 2020

Я пытаюсь выполнить пользовательскую аутентификацию с помощью стороннего API аутентификации , что означает, что у меня есть конечная точка входа в другой проект (проект Lumen). и я нашел руководство о том, как это сделать, но используя Laravel 5.2 на здесь .

Я использую:

  • Laravel 7
  • PhpRedis / Redis

ОШИБКА:

RuntimeException: хранилище сеансов не установлено по запросу.

Учебник довольно простой. Шаги следующие:

  1. Установите PhpRedis и Guzzle.
  2. Создайте настраиваемые контроллеры аутентификации, которые включают Throttles.php, где работает Кэш .
  3. Переопределить промежуточное программное обеспечение аутентификации Laravel (Authenticate.php).

Я выполнил все шаги и ничего не пропустил. Что я пытался исправить, но ни один из них не работает:

  1. Я использовал промежуточное ПО web в маршрутах входа в систему, но оно не сработает, и я не знаю, почему

    Route::group(['middleware' => ['web']], function () {
        Route::get('login', 'Auth\CustomAuthController@showLoginForm');
        Route::post('login', 'Auth\CustomAuthController@login');
        Route::get('logout', 'Auth\CustomAuthController@logout');
    });
    

А вот здесь мой Kernel.php по умолчанию.

protected $middlewareGroups = [
        'web' => [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\Session\Middleware\StartSession::class,
            // \Illuminate\Session\Middleware\AuthenticateSession::class,
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
            \App\Http\Middleware\VerifyCsrfToken::class,
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
        ],
Настроить драйвер кэша

Мой .env файл

BROADCAST_DRIVER=log
CACHE_DRIVER=redis
QUEUE_CONNECTION=sync
SESSION_DRIVER=redis
SESSION_LIFETIME=120

Мой database.php

'redis' => [

        'client' => env('REDIS_CLIENT', 'predis'),

        'options' => [
            'cluster' => env('REDIS_CLUSTER', 'redis'),
            'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'),
        ],

        'default' => [
            'host' => env('REDIS_HOST', 'localhost'),
            'password' => env('REDIS_PASSWORD', null),
            'port' => env('REDIS_PORT', 6379),
            'database' => 0,
            'read_write_timeout' => 60,
        ],

        'cache' => [
            'url' => env('REDIS_URL'),
            'host' => env('REDIS_HOST', '127.0.0.1'),
            'password' => env('REDIS_PASSWORD', null),
            'port' => env('REDIS_PORT', '6379'),
            'database' => env('REDIS_CACHE_DB', '1'),
        ],

        'session' => [
            'host' => env('REDIS_HOST', '127.0.0.1'),
            'password' => env('REDIS_PASSWORD', null),
            'port' => env('REDIS_PORT', 6379),
            'database' => 1,
        ],

    ],

И мой session.php

'connection' => 'session',

Я пробовал все это, и ни один из них не работал. Не знаю, что происходит, возможно, Laravel 7 нужно что-то еще или я что-то упускаю. Кто-нибудь может знать, почему промежуточное ПО web не работает?

1 Ответ

0 голосов
/ 13 мая 2020

Flor,

Я столкнулся с точно такой же проблемой. Он заработал, внося следующие изменения в AuthenticationRequest. php

класс AuthenticationRequest расширяет запрос

до

класс AuthenticationRequest расширяет FormRequest

Вам понадобится также следующий импорт

используйте Illuminate \ Foundation \ Http \ FormRequest;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...