2012-05-19 31 views
11

No recibo la documentación de redis node.js para usar la autenticación de redis.Node.js and Redis Auth

por el ejemplo:

var redis = require("redis"), 
client = redis.createClient(); 

// This command is magical. Client stashes the password and will issue on every connect. 
client.auth("somepass"); 

En mi código tengo los siguientes:

var redis = require("redis"); 
r = redis.createClient(6379,'xxx.xxx.xxx.xxx'); 
r.auth("yyyyyyyy"); 

app.get('/', function(req, res){ 
r.set("foo", 'bar'); 
res.writeHead(200, {'Content-Type': 'image/gif'}); 
res.end('Hello'); 
}); 

Aquí está el error que consigo:

Express server listening on port 8070 in development mode 

/home/ubuntu/workspace/rtbopsConfig/rtbServers/rtbNodejsServer/node_modules/redis/index.js:468 
       throw callback_err; 
        ^
Error: Auth error: Error: ERR Client sent AUTH, but no password is set 
    at Command.callback (/home/ubuntu/workspace/rtbopsConfig/rtbServers/rtbNodejsServer/node_modules/redis/index.js:163:43) 
    at RedisClient.return_error (/home/ubuntu/workspace/rtbopsConfig/rtbServers/rtbNodejsServer/node_modules/redis/index.js:464:25) 
    at HiredisReplyParser.<anonymous> (/home/ubuntu/workspace/rtbopsConfig/rtbServers/rtbNodejsServer/node_modules/redis/index.js:253:14) 
    at HiredisReplyParser.emit (events.js:67:17) 
    at HiredisReplyParser.execute (/home/ubuntu/workspace/rtbopsConfig/rtbServers/rtbNodejsServer/node_modules/redis/lib/parser/hiredis.js:41:18) 
    at RedisClient.on_data (/home/ubuntu/workspace/rtbopsConfig/rtbServers/rtbNodejsServer/node_modules/redis/index.js:440:27) 
    at Socket.<anonymous> (/home/ubuntu/workspace/rtbopsConfig/rtbServers/rtbNodejsServer/node_modules/redis/index.js:70:14) 
    at Socket.emit (events.js:67:17) 
    at TCP.onread (net.js:367:14) 
[7]+ Killed     node app.js 8070 


So, what is the proper way to auth? 
+0

EADDRINUSE es una cosa http - ¿está seguro de que esto es un problema con redis y no con la configuración de su servidor? – ControlAltDel

+0

He actualizado el mensaje de error – Tampa

+0

Tuve el mismo problema, descubrí que había editado la configuración en otro servidor para solicitar una contraseña y que el servidor que estaba ejecutando en mi servidor de transición no tenía el 'requirepass $ uP3rs3cretpassW0rd' en él ... ¡cojo! pero todo funciona ahora. – nak

Respuesta

1

Ésta es la forma correcta de usar auth.

Creo que está intentando usar una versión anterior del servidor Redis cuyo protocolo no es compatible con node_redis (o viceversa).

Alternativamente, es posible que no se conecte a la instancia que cree que está protegida por contraseña, o no ha establecido una contraseña en la configuración de la instancia a la que se dirige.

Sugiero que intente conectarse a la instancia utilizando redis-cli y use auth para probar la autenticación (es decir, omitiendo node.js).

+0

Hola, estoy usando redis2.6. También uso py-redis que funciona con auth. Auth funciona para todos los demás clientes que esperan node.js redis mranney. Incluso tornadoredis funciona. – Tampa

+0

Funciona bien para mí. ¿Cuáles son sus versiones de node.js y módulos asociados (es decir, npm list)? El mío es v0.6.16 con [email protected] y [email protected] ... –

+0

El nodo es v0.6.18. redis es [email protected] – Tampa

0

os sospechoso y yo tenemos el mismo problema. Me las arreglé para arreglar la mía aquí, pasando el módulo de Redis a sí misma como una opción para el constructor RedisStore:

Redis auth error with Node.js and socket.io

Sin él, el módulo RedisStore no reconocerá la RedisClient objetos que está pasando en como " true "Objetos de RedisClient (porque serán una clase redis.RedisClient de redis diferente), y RedisStore los volverá a crear y perderá la autenticación que configuró.

4

También otra razón para este problema podría ser no especificar su redis.conf al iniciar el servidor redis (si coloca "requirepass" en él).

En ese caso, el servidor redis comienza con la configuración predeterminada (es decir, sin la opción "requirepass" habilitada) y, por lo tanto, no acepta su comando AUTH.

./src/redis-server redis.conf