使用nodeJS中的tls(ssl)和auth_token密码连接到redis



我正在尝试连接到aws中的redis实例。我可以使用之类的东西连接到它

redis-cli -h localhost -p 6379 -a <auth_token> --tls PING

然而,当我使用node(redislibraryv4.2.0(这样做时,它会挂起

const redis = require("redis");
(async () => {
const client = redis.createClient( {
auth_pass:
"<auth_token>",
tls: { servername: "localhost", port: 6379 },
});
client.on("error", (err) => {
console.log("Redis Client Error", err);
});
client.connect();
console.log(await client.ping());
})();

端口转发是为aws中的redis设置的,这就是使用localhost的原因。auth令牌与我在配置redis时输入到sparkeformation的令牌相同。休息和传输加密也已配置。我一直在谷歌上寻找答案,但似乎有很多旧文档,没有一个新文档清楚如何使用tls和auth令牌建立连接。你知道怎么做吗?

如果有人遇到同样的问题,我可以使用ioredis来解决。

const Redis = require("ioredis");
(async () => {
const redisRef = new Redis("rediss://:<auth_token>@localhost:6379");
console.log(await redisRef.ping());
})();

并在本地运行时设置此环境变量:

export NODE_TLS_REJECT_UNAUTHORIZED=0

我最近遇到了node-redisv4(npm中的redis@4.6.7(的相同问题,接受的解决方案也可以在那里工作,只需进行一点修改:

const { createClient} = require('redis');
(async () => {
const client = createClient({
url: "redis://:<auth_token>@localhost:6379");
});
await client.connect();
console.log(await client.ping());
})();

这里需要记住的主要内容之一是protocol(我指的是redis://rediss://(。

您必须记住,rediss://协议启用tls,如果您的redis主机不支持tls(如本例中的localhost(,您将收到TimeOut错误,或者它将挂起。

相关内容

最新更新