authユーザー名/パスワードnodejsを使用してマネージドRedisに接続する

Aug 15 2020

編集:問題について考えた後、本当の問題は、tlsを使用してnode-redisでdigitaloceanのマネージドredisに接続する例は何ですか?

ユーザー名/パスワードを使用してredisinsightGUIクライアントに正常に接続できますが、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')
});

私が混乱していることの1つは、ユーザー名をどこに入力するかです。これは単なる「デフォルト」ですが、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が使用される場合、パスワードのみが指定されるコマンドの単一引数形式は、暗黙のユーザー名が「デフォルト」であると想定します。

したがって、追加のユーザーがサポートされているRedis 6を使用している場合でも、の認証は機能するdefaultはずです。

表示されているエラーは、接続が切断された結果です。たとえば、Redisサーバーとの接続が何らかの理由で失われました。node-redis2つのシナリオのいずれか(または両方)を処理しています-接続がタイムアウトしたか、再接続の試行が構成で指定された最大数を超えました。接続情報とredisサーバーの構成を再確認します。

TLSを使用しているようですが、これが役立つ場合があります:ノードRedisの保護

別のユーザーでnode-redisクライアントを認証する場合は、Redis 6を使用するときにを使用send_commandする必要がありますが、現在node-redisは新しいコマンドをサポートしていないため、現在のAUTHコマンドを削除する必要がありますAUTH <username> <password>

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