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();