Laravel 7 会话存储未按要求设置
Posted
技术标签:
【中文标题】Laravel 7 会话存储未按要求设置【英文标题】:Laravel 7 Session store not set on request 【发布时间】:2020-08-24 17:13:57 【问题描述】:我正在尝试使用第三方身份验证 API 进行 自定义身份验证,这意味着我在另一个项目(Lumen 项目)中有一个登录端点。我找到了一个关于如何做到这一点的教程,但在 here 上使用 Laravel 5.2
。
我正在使用:
Laravel 7 phpRedis/Redis错误:
RuntimeException: 会话存储未按请求设置。
教程有点简单。步骤如下:
-
安装 PhpRedis 和 Guzzle。
创建包含
Throttles.php
的自定义身份验证控制器,其中适用于缓存。
覆盖 Laravel 的身份验证中间件 (Authenticate.php
)。
我已完成所有步骤,并且没有遗漏任何内容。我试图解决这个问题,但它们都不起作用:
我在登录路由中使用了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】:弗洛尔,
我面临着完全相同的问题。通过进行以下更改使其正常工作 AuthenticationRequest.php
类 AuthenticationRequest 扩展请求
到
类 AuthenticationRequest 扩展 FormRequest
您还需要以下导入
使用 Illuminate\Foundation\Http\FormRequest;
【讨论】:
我猜在较新版本的 laravel 中,当我们使用以下命令 php artisan make:request someSampleRequest 创建新请求时,它会使用 FormRequest 依赖项。以上是关于Laravel 7 会话存储未按要求设置的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 8 Sanctum SPA Auth - 未按要求设置会话存储
php artisan route:list RuntimeException 会话存储未按请求设置