Menghubungkan ke redis terkelola dengan auth nama pengguna / sandi nodejs

Aug 15 2020

Sunting: Setelah memikirkan masalah ini, pertanyaan sebenarnya adalah apa contoh menghubungkan ke redis terkelola digitalocean dengan node-redis menggunakan tls?

Saya dapat terhubung dengan baik dengan klien GUI redisinsight menggunakan nama pengguna / kata sandi, tetapi tidak dapat terhubung dengan nodejs. Ada di komputer yang sama jadi tidak ada masalah firewall.

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')
});

Satu hal yang membuat saya bingung adalah di mana memasukkan nama pengguna? Ini hanya 'default' tetapi dokumentasi untuk node_redis tidak menyediakan cara untuk memberikan nama pengguna selama auth.

Kesalahannya adalah: AbortError: Redis connection lost and command aborted. It might have been processed.

Inilah layar koneksi redisinsight anonim saya yang berfungsi.

Bagaimana cara melakukan hal yang sama di node-redis?

Jawaban

2 LeoMurillo Aug 16 2020 at 07:36

The AUTHperintah, seperti yang dinyatakan dalam dokumentasi :

Ketika ACL digunakan, bentuk argumen tunggal dari perintah, di mana hanya kata sandi yang ditentukan, mengasumsikan bahwa nama pengguna implisit adalah "default".

Jadi, meskipun Anda menggunakan Redis 6, yang mendukung pengguna tambahan, autentikasi untuk Anda defaultseharusnya berfungsi.

Kesalahan yang Anda lihat adalah akibat dari koneksi yang terputus , misalnya Anda kehilangan koneksi dengan server Redis. node-redisberurusan dengan salah satu dari dua skenario (atau keduanya) - koneksi telah habis waktu atau upaya menghubungkan kembali telah melebihi jumlah maksimum yang ditentukan dalam konfigurasi. Saya akan memeriksa kembali informasi koneksi Anda dan bagaimana server redis Anda dikonfigurasi.

Saya melihat Anda menggunakan TLS, Anda mungkin menemukan ini berguna: Mengamankan Node Redis

Jika Anda ingin mengotentikasi klien node-redis dengan pengguna yang berbeda, saat menggunakan Redis 6, Anda harus menggunakan send_command, tetapi sebelum Anda perlu menghapusAUTH perintah saat ini , karena saat ini node-redis tidak mendukung perintah baru AUTH <username> <password>.

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