Тот же пароль Redis, который работает с клиентом Redis, не работает с методом Node.JS createClient ()? - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть сервер Redis, работающий с Node.JS версии 10.4.2.Я использую 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

Когда я использовал код, который комментируетсяЯ не использовал свойство "no_ready_check" во время createClient () .Некоторые факты:

  • Я трижды проверил значение в process.env.REDIS_AUTH , и оно точно соответствует тому, что находится в моем файле конфигурации сервера Redis для requirepass значение пароля.

  • I может использовать пароль для успешной аутентификации при тестировании с помощью клиента командной строки Redis ( redis-cli ) поэтому я знаю, что сервер Redis защищен паролем и что пароль работает.

  • Я знаю, что пароль проходит, потому что когда я использую закомментированный код, я вижуправильный пароль в аргументах, передаваемых функции обратного вызова.

Почему мой пароль не работает с моим кодом Node.JS и как я могу это исправить?Обратите внимание, что пароль был сгенерирован с использованием генератора случайных паролей SSL в Linux.Я упоминаю, что в случае, если это повлияет на что-либо.

ОБНОВЛЕНИЕ : я получил это с помощью намного более короткого пароля в файле конфигурации сервера Redis.Очевидно, пакет Node.JS Redis не любит длинные случайные пароли, сгенерированные утилитой Linux SSL, хотя в этих паролях вообще нет странных символов.Я разместил вопрос на эту тему в репозитории здесь:

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

1 Ответ

0 голосов
/ 07 февраля 2019

Я использовал следующие команды для создания пароля с помощью OpenSSL на моем Linux-компьютере:

openssl rand 60 | openssl base64 -A

К сожалению openssl создает пароли с прямой косой чертой в них "/ ».Могут быть и другие персонажи, которые не являются здоровыми в этом контексте, но я не исчерпывающе проверил их.После того как я удалил прямую косую черту из пароля и после перезапуска сервера Redis для регистрации изменений, попытка создания клиента работала с Node.JS.

Что-то происходит на стороне Node.JS с этими персонажами на пути к Redis.Как я уже сказал, у меня не было проблем при непосредственном вставлении той же косой черты, содержащей пароли, в клиент Redis при использовании команды auth.Но использование их из Node.JS приводит к неудачной попытке аутентификации.

Мой лучший совет всем, кто читает этот пост, если вы используете команду openssl для генерации паролей redis для вашего Node.Приложение JS, удалите любые символы, которые не являются строго «a-zA-Z» из сгенерированного пароля.Возможно, кто-нибудь позже даст лучшее решение в ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...