gpt4 book ai didi

node.js - 使用 Node.JS createClient() 方法时,与 Redis 客户端一起使用的相同 Redis 密码失败了吗?

转载 作者:可可西里 更新时间:2023-11-01 11:23:53 24 4
gpt4 key购买 nike

我有一个运行 Node.JS 版本 10.4.2 的 Redis 服务器。我在我的应用程序中使用 NPM“redis”客户端。我正在使用以下代码创建 Redis 客户端并进行身份验证。 (注意下面注释掉的代码,看看我还尝试了什么):

var redis = require("redis");
// var redisClient = require('redis').createClient(process.env.REDIS_URL || redis);
var redisClient = redis.createClient(
{
port: process.env.REDIS_PORT,
host: process.env.REDIS_URL,
no_ready_check: true,
auth_pass: process.env.REDIS_AUTH
});

/*
// Authenticate with Redis.
redisClient.auth(process.env.REDIS_AUTH, function(err, reply) {
if (err) {
console.error(err);
}
else {
console.log(reply);
}
});
*/

但是,我总是收到以下错误:

ReplyError: ERR invalid password

当我使用被注释掉的代码时,我在 createClient() 期间没有使用“no_ready_check”属性。一些事实:

  • 我对 process.env.REDIS_AUTH 中的值进行了三重检查,它与我的 Redis 服务器配置文件中的 requirepass 密码值完全匹配。

  • 在使用 Redis 命令行客户端 (redis-cli) 进行测试时,我可以使用密码成功进行身份验证,因此我知道 Redis 服务器受密码保护并且密码有效。

  • 我知道密码正在通过,因为当我使用被注释掉的代码时,我可以在传递给回调函数的参数中看到正确的密码。

为什么我的密码不能与我的 Node.JS 代码一起使用,我该如何解决这个问题?请注意,密码是使用 Linux 上的 SSL 随 secret 码生成器生成的。我提到它以防它影响任何事情。

更新:我通过在 Redis 服务器 conf 文件中使用更短的密码来实现此目的。显然,Node.JS Redis 包不喜欢 Linux SSL 实用程序生成的长随 secret 码,尽管这些密码中根本没有奇怪的字符。我在这里的包 repo 上发布了关于这个主题的问题:

https://github.com/NodeRedis/node_redis/issues/1411

最佳答案

我使用以下命令在我的 Linux 机器上使用 OpenSSL 创建密码:

openssl rand 60 | openssl base64 -A

不幸的是,openssl 创建的密码中包含正斜杠 "/"。在这种情况下可能还有其他不健康的角色,但我没有对它们进行详尽的测试。一旦我从密码中删除正斜杠,并在我重新启动 Redis 服务器以注册更改后,客户端创建尝试就可以从 Node.JS 开始工作。

在前往 Redis 的过程中,Node.JS 端发生了一些变化。正如我所说,在使用 auth 命令时将包含密码的完全相同的正斜杠直接粘贴到 Redis 客户端时,我没有遇到任何问题。但是从 Node.JS 使用它们会导致身份验证尝试失败。

我对阅读这篇文章的人最好的建议是,如果您正在使用 openssl 命令为您的 Node.JS 应用程序生成 redis 密码,请删除所有不严格为 'a-zA- 的字符Z' 来自生成的密码。也许稍后会有人给出更好的解决方案作为回复。

关于node.js - 使用 Node.JS createClient() 方法时,与 Redis 客户端一起使用的相同 Redis 密码失败了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54558676/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com