同样Redis的密码与Redis的客户端工作失败的Node.js createClient()方法?
我有一个Node.js的版本10.4.2运行Redis的服务器。我现在用的是故宫“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的价值和它匹配到底是什么在为requirepass密码值我的Redis服务器的conf文件。
- 我可以使用密码使用Redis的命令行客户端(Redis的-CLI)进行测试时,认证成功,所以我知道Redis的服务器是密码保护和密码的作品。
- 我知道密码通过,因为当我使用的是被注释掉的代码,我可以传递给回调函数的参数看正确的密码获得。
为什么我的密码,我的Node.js代码的工作,我该如何解决这一问题?请注意,在Linux上使用SSL随机密码生成器生成的密码。我提到的情况下,它会影响什么。
更新:我在Redis的服务器的conf文件中使用更短的密码,得到了这个工作。显然Node.js的Redis的包不喜欢被Linux SSL实用程序生成的长的随机密码,尽管在所有有是在那些没有密码奇怪的字符。我贴在这里上的包回购这一主题的问题:
回答如下:我用的是下面的命令来创建我的Linux系统中使用OpenSSL的密码:
openssl rand 60 | openssl base64 -A
不幸的是openssl
创建密码以向前斜杠他们“/”。可能有其他字符都没有在这方面健康,但我还没有彻底测试它们。一旦我删除了前从密码斜线,和我重新启动Redis的服务器注册更改后,客户端试图建立从Node.js的工作
有什么东西在Node.js的一侧发生在道路上的Redis的这些字符。正如我所说,我没有问题的时候直接粘贴含有密码到Redis的客户端使用auth
命令时非常相同的正斜杠。但是,使用它们的Node.js促使验证尝试失败。
我最好的人阅读这篇文章的建议是,如果你正在使用OpenSSL的命令生成您的Node.js应用Redis的密码,删除任何字符是不从严从生成的密码“A-ZA-Z”。也许有人会后作为回复给一个更好的解决方案。