Connessione a redis gestito con nome utente / password di autenticazione nodejs
Modifica: dopo aver riflettuto sul problema, la vera domanda è: qual è un esempio di connessione a redis gestito di digitalocean con node-redis utilizzando tls?
Sono in grado di connettermi perfettamente con il client GUI redisinsight utilizzando nome utente / password, ma non riesco a connettermi con nodejs. È sullo stesso computer quindi nessun problema di 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')
});
Una cosa su cui sono confuso è dove inserire il nome utente? È solo "predefinito" ma la documentazione per node_redis non fornisce un modo per fornire un nome utente durante l'autenticazione.
L'errore è: AbortError: Redis connection lost and command aborted. It might have been processed.
Ecco la mia schermata di connessione di redisinsight leggermente anonima funzionante.
Come faccio a fare lo stesso in node-redis?

Risposte
Il AUTH
comando, come dichiarato nei documenti :
Quando vengono utilizzati gli ACL, la forma a singolo argomento del comando, in cui è specificata solo la password, presuppone che il nome utente implicito sia "predefinito".
Quindi, anche se stai usando Redis 6, dove sono supportati utenti aggiuntivi, la tua autenticazione per default
dovrebbe funzionare.
L'errore che vedi è il risultato di una connessione interrotta , ad esempio hai perso in qualche modo la connessione con il server Redis. node-redis
sta affrontando uno dei due scenari (o entrambi): la connessione è scaduta oppure i tentativi di riconnessione hanno superato il numero massimo specificato in una configurazione. Vorrei ricontrollare le informazioni sulla connessione e come è configurato il server Redis.
Vedo che stai usando TLS, potresti trovare utile questo: Securing Node Redis
Se vuoi autenticare il client node-redis con un utente diverso, quando usi Redis 6, dovrai usare send_command
, ma prima di dover rimuovere il AUTH
comando corrente , poiché attualmente node-redis non supporta il nuovo comando AUTH <username> <password>
.
client['auth'] = null;
client.send_command('AUTH', ['<username>', '<password>'], redis.print);