【发布时间】:2019-02-06 16:51:14
【问题描述】:
我有一个运行 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 随机密码生成器生成的。我提一下,以防它影响任何事情。
更新:我通过在 Redis 服务器 conf 文件中使用更短的密码来实现此功能。显然 Node.JS Redis 包不喜欢 Linux SSL 实用程序生成的长随机密码,尽管这些密码中根本没有奇怪的字符。我在这里的包回购中发布了一个关于这个主题的问题:
【问题讨论】:
-
您是否通过在终端中运行
REDIS_AUTH=<redis password> npm start来检查它的完整性? -
@mralanlee 不,我应该寻找什么?无论如何,我通过使用更短的密码使事情正常进行。通过 SSL 生成的 64 个字符的密码显然是 Node.JS Redis 软件包的问题。我现在在 Redis 包 repo 上发布了一个 GitHub 问题。
标签: node.js authentication redis passwords