无法连接到 Redis 实例:Redis 错误:NOAUTH(未定义)



SocketIO适配器是这样配置的,所有变量都被设置和检查:

const pub = redis.createClient(REDIS_PORT, REDIS_HOST, { auth_pass: REDIS_PASSWORD });
const sub = redis.createClient(REDIS_PORT, REDIS_HOST, { auth_pass: REDIS_PASSWORD });
io.adapter(redisAdapter({ pubClient: pub, subClient: sub }));

redis.conf在Redis容器中使用如下:

requirepass mypassword2023

配置文件被复制到容器中,没有问题:

[...]
volumes:
- ./redis:/usr/local/etc/redis/
command: redis-server /usr/local/etc/redis/redis.conf
[...]

我能够进入运行的Redis容器并验证自己:

127.0.0.1:6379> AUTH mypassword2023
OK

但是当我试图从我的后端到达Redis实例时,我得到NOAUTH错误。这意味着,后端确实到达了Redis实例,但它也给出了错误的密码,无法进一步操作。

对于如何排除这个问题有什么提示吗?

我假设你在这里使用的是node-redis (https://github.com/redis/node-redis/)。

当连接并提供主机名、端口和密码时,您有两个选项。首先,您可以像这样使用配置对象:

const myClient = redis.createClient({
socket: {
port: REDIS_PORT, 
host: REDIS_HOST
},
password: REDIS_PASSWORD 
);

我个人倾向于为整个Redis URL格式的连接使用单个秘密(https://www.iana.org/assignments/uri-schemes/prov/redis)。下面是一个使用代码中的秘密设置的示例:

const myClient = redis.createClient({
url: `redis://default:${REDIS_PASSWORD}@${REDIS_HOST}:${REDIS_PORT}`
});

如果您使用服务器范围的requirepass密码,则default是您将使用的用户名。

请注意,node-redis 4在myClient中返回一个连接,但你想在使用它之前将它连接到Redis服务器:

await redisClient.connect();

相关内容

  • 没有找到相关文章

最新更新