authユーザー名/パスワードnodejsを使用してマネージドRedisに接続する
編集:問題について考えた後、本当の問題は、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で同じことをするにはどうすればよいですか?
回答
AUTH
で述べたように、コマンド、ドキュメント:
ACLが使用される場合、パスワードのみが指定されるコマンドの単一引数形式は、暗黙のユーザー名が「デフォルト」であると想定します。
したがって、追加のユーザーがサポートされているRedis 6を使用している場合でも、の認証は機能するdefault
はずです。
表示されているエラーは、接続が切断された結果です。たとえば、Redisサーバーとの接続が何らかの理由で失われました。node-redis
2つのシナリオのいずれか(または両方)を処理しています-接続がタイムアウトしたか、再接続の試行が構成で指定された最大数を超えました。接続情報と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);