인증 사용자 이름 / 암호 nodejs로 관리 형 redis에 연결

Aug 15 2020

편집 : 문제에 대해 생각한 후 진짜 질문은 tls를 사용하여 node-redis로 digitalocean의 관리 형 redis에 연결하는 예가 무엇입니까?

사용자 이름 / 암호를 사용하여 redisinsight GUI 클라이언트와 잘 연결할 수 있지만 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명령에 명시된 바와 같이 워드 프로세서 :

ACL이 사용되는 경우 명령의 단일 인수 형식 (암호 만 지정됨)은 암시 적 사용자 이름이 "default"라고 가정합니다.

따라서 추가 사용자가 지원되는 Redis 6을 사용하는 경우에도에 대한 인증 default이 작동합니다.

표시되는 오류는 연결이 끊어진 결과입니다 ( 예 : Redis 서버와의 연결이 끊어진 경우). node-redis두 시나리오 중 하나 (또는 ​​둘 다)를 처리하고 있습니다. 연결 시간이 초과되었거나 다시 연결 시도가 구성에 지정된 최대 수를 초과했습니다. 연결 정보와 redis 서버가 어떻게 구성되어 있는지 다시 확인하겠습니다.

TLS를 사용하고 계시다면 이것이 유용 할 것입니다 : Securing Node Redis

다른 사용자로 node-redis 클라이언트를 인증하려면 Redis 6을 사용할 때를 사용해야 send_command하지만 현재 node-redis가 새 명령을 지원하지 않으므로 현재 명령 을 제거 해야합니다 .AUTHAUTH <username> <password>

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