Menghubungkan ke redis terkelola dengan auth nama pengguna / sandi nodejs
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
The AUTH
perintah, 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 default
seharusnya berfungsi.
Kesalahan yang Anda lihat adalah akibat dari koneksi yang terputus , misalnya Anda kehilangan koneksi dengan server Redis. node-redis
berurusan 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);