Подключение к управляемому Redis с именем пользователя / паролем auth nodejs

Aug 15 2020

Изменить: подумав об этой проблеме, реальный вопрос заключается в том, каков пример подключения к управляемому redis digitalocean с помощью node-redis с использованием tls?

Я могу нормально подключиться к клиенту графического интерфейса Redisinsight, используя имя пользователя / пароль, но не могу подключиться к nodejs. Он находится на том же компьютере, поэтому проблем с брандмауэром нет.

var redis = require('redis');
var client = redis.createClient(process.env.REDIS_PORT, process.env.REDIS_URL, {no_ready_check: true});
client.auth('password', function (err) {
    if (err) {
      console.log(err);
      return
    }
    console.log('auth')
});

Я не совсем понимаю, где вводить имя пользователя? Это просто "по умолчанию", но документация для node_redis не предоставляет способ указать имя пользователя во время аутентификации.

Ошибка: AbortError: Redis connection lost and command aborted. It might have been processed.

Вот мой рабочий слегка анонимный экран подключения Redisinsight.

Как мне сделать то же самое в node-redis?

Ответы

2 LeoMurillo Aug 16 2020 at 07:36

Команда AUTH, как указано в документации :

Когда используются списки управления доступом, форма команды с одним аргументом, где указан только пароль, предполагает, что неявное имя пользователя является "по умолчанию".

Так что даже если вы используете Redis 6, где поддерживаются дополнительные пользователи, ваша аутентификация defaultдолжна работать.

Ошибка, которую вы видите, является результатом разрыва соединения , например, вы каким-то образом потеряли соединение с сервером Redis. node-redisимеет дело с одним из двух сценариев (или с обоими) - время ожидания соединения истекло или количество попыток повторного подключения превысило максимальное количество, указанное в конфигурации. Я бы дважды проверил информацию о вашем подключении и настройку вашего сервера Redis.

Я вижу, вы используете TLS, это может вам пригодиться: Защита узла Redis

Если вы хотите аутентифицировать клиента node-redis с другим пользователем, при использовании Redis 6 вам придется использовать send_command, но до того, как вам нужно будет удалить текущую AUTHкоманду, поскольку в настоящее время node-redis не поддерживает новую команду AUTH <username> <password>.

client['auth'] = null;
client.send_command('AUTH', ['<username>', '<password>'], redis.print);