首页 > 解决方案 > Laravel 7 会话存储未按要求设置

问题描述

我正在尝试使用第三方身份验证 API 进行自定义身份验证,这意味着我在另一个项目(流明项目)中有一个登录端点。我找到了一个关于如何做到这一点的教程,但Laravel 5.2这里使用。

我在用着:

错误:

RuntimeException:未按请求设置会话存储。

教程有点简单。步骤如下:

  1. 安装 PhpRedis 和 Guzzle。
  2. 创建自定义身份验证控制器,其中包括CacheThrottles.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,
        ],
  1. 配置缓存驱动

我的.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中间件不起作用?

标签: laravel

解决方案


弗洛尔,

我面临着完全相同的问题。通过在 AuthenticationRequest.php 中进行以下更改使其工作

类 AuthenticationRequest 扩展请求

类 AuthenticationRequest 扩展 FormRequest

您还需要以下导入

使用 Illuminate\Foundation\Http\FormRequest;


推荐阅读