Redis connection [auth] not configured

1. 运行环境

1). 当前使用的 Laravel 版本?

Laravel Framework Lumen (10.0.1)
//: <> (使用 php artisan --version 命令查看)

2). 当前使用的 php/php-fpm 版本?

PHP 版本:PHP 8.2.12

php-fpm 版本:8.2.12-1.el9.remi

3). 当前系统

CentOS Stream 9
//: <> (期待数值 Windows 10 / Ubuntu 20.4 / CentOS 8 )

4). 业务环境

开发环境
//: <> (期待信息 开发环境生产环境)
//: <> (是否使用负载均衡?请提供相关信息)

5). 相关软件版本

nginx.x86_64 1:1.22.1-2.el9

2. 问题描述?

为了避免不同功能的缓存全部混在一起相互干扰,我为登录相关验证的缓存添加了一个新的redis配置,在Console中创建了一个测试命令,是可以正常操作redis的,但到了浏览器中就显示redis的连接没有配置
一开始我以为是配置文件格式有问题,但编写了一个Console Command测试时成功操作了redis,所以格式应该是正确的,但在curl请求和浏览器里请求时都会报错,所以现在怀疑是cli模式和http请求时有什么加载上的差异,希望得到大佬们的指点,谢谢

配置文件(以从/vendor/laravel/lumen-framework/config/中提供的模板为基础修改而成)
cache.php

<?php

use Illuminate\Support\Str;

return [
    'default' => env('CACHE_DRIVER', 'redis'),

    'stores' => [
        'redis' => [
            'driver' => 'redis',
            'connection' => env('CACHE_REDIS_CONNECTION', 'default'),
        ],

        'auth' => [
            'driver' => 'redis',
            'connection' => 'auth',
        ]
    ],
];

database.php

<?php

use Illuminate\Support\Str;

return [
    'default' => env('DB_CONNECTION', 'mysql'),

    'connections' => [
        'mysql' => [
            'driver' => 'mysql',
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', 3306),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => env('DB_CHARSET', 'utf8mb4'),
            'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'),
            'prefix' => env('DB_PREFIX', ''),
            'strict' => env('DB_STRICT_MODE', true),
            'engine' => env('DB_ENGINE'),
            'timezone' => env('DB_TIMEZONE', '+00:00'),
        ],
    ],

    'redis' => [

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

        'default' => [
            //'url' => env('REDIS_URL'),
            'host' => env('REDIS_HOST', '127.0.0.1'),
            'password' => env('REDIS_PASSWORD'),
            'port' => env('REDIS_PORT', '6379'),
            'database' => 0,
        ],
        'auth' => [
            //'url' => env('REDIS_URL'),
            'host' => env('REDIS_HOST', '127.0.0.1'),
            'password' => env('REDIS_PASSWORD'),
            'port' => env('REDIS_PORT', '6379'),
            'database' => 1,
        ],
    ],
];

调用的代码

<?php
namespace App\Http\Controllers;

class Auth extends Controller
{
    public function sms(\App\Http\Inputs\Sms $in)
    {
        var_dump(\Illuminate\Support\Facades\Redis::connection('auth')); exit;
    }
}

3. 您期望得到的结果?

4. 您实际得到的结果?

curl命令输出最后一行:
Redis connection [auth] not configured. (500 Internal Server Error)

报错日志:

[2023-12-18 05:03:42] local.ERROR: Redis connection [auth] not configured. {"exception":"[object] (InvalidArgumentException(code: 0): Redis connection [auth] not configured. at /var/work/monkesky/lumen/vendor/illuminate/redis/RedisManager.php:120)
[stacktrace]
#0 /var/work/xxx/lumen/vendor/illuminate/redis/RedisManager.php(91): Illuminate\\Redis\\RedisManager->resolve()
#1 /var/work/xxx/lumen/vendor/illuminate/support/Facades/Facade.php(353): Illuminate\\Redis\\RedisManager->connection()
#2 /var/work/xxx/lumen/app/Http/Controllers/Auth.php(8): Illuminate\\Support\\Facades\\Facade::__callStatic()
#3 /var/work/xxx/lumen/vendor/illuminate/container/BoundMethod.php(36): App\\Http\\Controllers\\Auth->sms()
#4 /var/work/xxx/lumen/vendor/illuminate/container/Util.php(41): Illuminate\\Container\\BoundMethod::Illuminate\\Container\\{closure}()
#5 /var/work/xxx/lumen/vendor/illuminate/container/BoundMethod.php(93): Illuminate\\Container\\Util::unwrapIfClosure()
#6 /var/work/xxx/lumen/vendor/illuminate/container/BoundMethod.php(35): Illuminate\\Container\\BoundMethod::callBoundMethod()
#7 /var/work/xxx/lumen/vendor/illuminate/container/Container.php(662): Illuminate\\Container\\BoundMethod::call()
#8 /var/work/xxx/lumen/vendor/laravel/lumen-framework/src/Concerns/RoutesRequests.php(391): Illuminate\\Container\\Container->call()
#9 /var/work/xxx/lumen/vendor/laravel/lumen-framework/src/Concerns/RoutesRequests.php(356): Laravel\\Lumen\\Application->callControllerCallable()
#10 /var/work/xxx/lumen/vendor/laravel/lumen-framework/src/Concerns/RoutesRequests.php(331): Laravel\\Lumen\\Application->callLumenController()
#11 /var/work/xxx/lumen/vendor/laravel/lumen-framework/src/Concerns/RoutesRequests.php(284): Laravel\\Lumen\\Application->callControllerAction()
#12 /var/work/xxx/lumen/vendor/laravel/lumen-framework/src/Concerns/RoutesRequests.php(269): Laravel\\Lumen\\Application->callActionOnArrayBasedRoute()
#13 /var/work/xxx/lumen/vendor/laravel/lumen-framework/src/Concerns/RoutesRequests.php(171): Laravel\\Lumen\\Application->handleFoundRoute()
#14 /var/work/xxx/lumen/vendor/laravel/lumen-framework/src/Routing/Pipeline.php(48): Laravel\\Lumen\\Application->Laravel\\Lumen\\Concerns\\{closure}()
#15 /var/work/xxx/lumen/app/Http/Middleware/Cors.php(22): Laravel\\Lumen\\Routing\\Pipeline->Laravel\\Lumen\\Routing\\{closure}()
#16 /var/work/xxx/lumen/vendor/illuminate/pipeline/Pipeline.php(180): App\\Http\\Middleware\\Cors->handle()
#17 /var/work/xxx/lumen/vendor/laravel/lumen-framework/src/Routing/Pipeline.php(30): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#18 /var/work/xxx/lumen/vendor/illuminate/pipeline/Pipeline.php(116): Laravel\\Lumen\\Routing\\Pipeline->Laravel\\Lumen\\Routing\\{closure}()
#19 /var/work/xxx/lumen/vendor/laravel/lumen-framework/src/Concerns/RoutesRequests.php(428): Illuminate\\Pipeline\\Pipeline->then()
#20 /var/work/xxx/lumen/vendor/laravel/lumen-framework/src/Concerns/RoutesRequests.php(167): Laravel\\Lumen\\Application->sendThroughPipeline()
#21 /var/work/xxx/lumen/vendor/laravel/lumen-framework/src/Concerns/RoutesRequests.php(112): Laravel\\Lumen\\Application->dispatch()
#22 /var/work/xxx/lumen/public/index.php(28): Laravel\\Lumen\\Application->run()
#23 {main}
"} 
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
最佳答案

感谢各位大佬的帮助,问题已经解决了,解决方式是在 bootstrap/app.php 中添加 $app->configure('database'); $app->configure('cache'); 这样两行,虽然错误很低级,但我姑且也写一下最终发现问题的排错思路,以期类似的排错思路能在某些情况下帮助各位同行解决其它的问题:报错信息是auth not configured,我就想着把当前的配置打印出来看一下,var_dump(config('database'))显示是null,而在Console中显示出了不一样的结果(即实际的配置值),所以猜想Console和http中获取配置的策略有区别,Console是加载全部有效的配置文件,而http中为了运行效率,只加载bootstrap/app.php中显示指定的配置文件,所以我加上了上面提到的两行,再运行就正常了

1年前 评论
讨论数量: 8

密码没有配置

1年前 评论
SDPoplar (楼主) 1年前

有没有可能你的auth 那个配置(cache.php)是 Cache的,你的redis 从始至终就是redis(database.php)那个配置。 所以你去获取redis配置为 auth的肯定不存在了

1年前 评论
SDPoplar (楼主) 1年前

您好,根据提供的信息,可能有几个方面需要检查和调试。以下是一些建议:

  1. 确保配置信息正确:
    在你的 config/cache.php 文件中,确保你为auth缓存配置了正确的redis连接。确保auth连接在config/database.phpredis配置中存在。

    请检查数据库连接配置是否正确,在配置中看到数据库的密码为空字符串,是否忘记填密码了呢?
    请检查env中密码配置,本地和测试环境的env是否一致

  2. 环境变量和配置缓存:
    确保你在运行 Laravel 之前已经重新生成了配置缓存。你可以运行以下 Artisan 命令来重新生成:

      php artisan config:cache

    如果你修改了配置文件,但没有重新生成配置缓存,可能会导致配置不生效。

  3. 调试连接问题:
    在你的 Auth 控制器中使用以下代码,检查是否能够正确连接到 Redis:

      public function sms(\App\Http\Inputs\Sms $in)
      {
          $redis = \Illuminate\Support\Facades\Redis::connection('auth');
          try {
              $redis->ping();
              var_dump($redis); // 看看是否能够连接到 Redis
          } catch (\Exception $e) {
              var_dump($e->getMessage()); // 打印错误信息
          }
          exit;
      }

    这将输出关于连接状态的信息,有助于排除是否存在连接问题。

  4. 查看 Laravel 日志:
    在 Laravel 应用中,你还可以查看 storage/logs 目录下的日志文件,寻找与 Redis 相关的错误信息。这可能提供关于问题的更多线索。

  5. 检查 Web 服务器权限:
    确保 Web 服务器进程(例如 Nginx 或 Apache)有权限访问 Redis。在某些情况下,Web 服务器的用户权限可能不足以连接到 Redis。

  6. 检查 SELinux 或防火墙:
    如果你的服务器上启用了 SELinux 或防火墙,确保它们允许 Web 服务器与 Redis 之间的通信。

通过逐步检查以上步骤,你应该能够找到问题的所在。如果问题仍然存在,可以提供更多关于错误信息或日志的详细信息,以便更进一步的帮助。

1年前 评论

file

路径不对, Redis::connection('redis.auth')

或者把auth配置放到 connections 下面。 (查文档或者看源码才行了)

1年前 评论
SDPoplar (楼主) 1年前

感谢各位大佬的帮助,问题已经解决了,解决方式是在 bootstrap/app.php 中添加 $app->configure('database'); $app->configure('cache'); 这样两行,虽然错误很低级,但我姑且也写一下最终发现问题的排错思路,以期类似的排错思路能在某些情况下帮助各位同行解决其它的问题:报错信息是auth not configured,我就想着把当前的配置打印出来看一下,var_dump(config('database'))显示是null,而在Console中显示出了不一样的结果(即实际的配置值),所以猜想Console和http中获取配置的策略有区别,Console是加载全部有效的配置文件,而http中为了运行效率,只加载bootstrap/app.php中显示指定的配置文件,所以我加上了上面提到的两行,再运行就正常了

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!