Reputation: 78254
I dont get the redis node.js documentation for using redis auth.
per the example:
var redis = require("redis"),
client = redis.createClient();
// This command is magical. Client stashes the password and will issue on every connect.
client.auth("somepass");
In my code I have the following:
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');
});
Here is the error I get:
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?
Upvotes: 16
Views: 38612
Reputation: 167
You need to check the password from redis.conf path (Ex):
usr/local/etc/redis.conf
Named as => requirepass
Then you can add it by:
const rediClient = redis.createClient({
password: '<YourPassword>'
});
And if you want to auth by terminal you can use:
AUTH <password>
Ref: https://redis.io/commands/auth/
Upvotes: 0
Reputation: 3440
The following code creates a connection to Redis using node package redis.
const redis = require('redis');
const client = redis.createClient({
host: '<hostname>',
port: <port>,
password: '<password>'
});
Upvotes: 2
Reputation: 2232
Redis in newer versions enables protected mode by default accepting only loopback and unix domain sockets.
To connect from extern either bind in redis.conf to bind publicip anotherip etc
and requirepass foobared
. Now test with redis-cli ping
.
If no requirepass
anyone can FLUSHALL
:)
Enable firewall to filter port access for further protection, also see quickstart security notes.
Instead of exposing ports you can use (temporarily) ssh tunnels: Since i wanted a simple and encrypted tunnel, run on client side:
ssh -f -N -L 6379:127.0.0.1:6379 user@<serverip>
before starting node index.js
, so redis is save on its loopback address server-side and i use port forwarding on the client (-f -N for background process ps -x) with setup ssh keys.
If persistent you should look into recommended spiped.
Upvotes: 1
Reputation: 51
Also another reason for this problem might be not specifying your redis.conf when starting redis-server (if you put "requirepass" in it).
In that case redis server starts with default configuration (i.e. without "requirepass" option enabled) and therefore doesn't accept your AUTH command.
./src/redis-server redis.conf
Upvotes: 5
Reputation: 3495
I suspect you and I are having the same problem. I managed to fix mine here, by passing the redis module itself as an option to the RedisStore constructor:
Redis auth error with Node.js and socket.io
Without it, the RedisStore module won't recognize the RedisClient objects you're passing in as "true" RedisClient objects (because they'll be a redis.RedisClient class from a different redis), and RedisStore will recreate them and lose the auth you set.
Upvotes: 0
Reputation: 73226
This is the correct way to use auth.
I believe you are trying to use an old version of Redis server whose protocol is not supported by node_redis (or vice versa).
Alternatively, you might not connect to the instance you think is password protected, or you have not set a password in the configuration of the instance you target.
I suggest you try to connect to the instance using redis-cli and use auth to test authentication (i.e. bypassing node.js).
Upvotes: 1
Reputation: 35011
I found someone else with the same problem looking under the redis auth documentation
You might want to follow up from there
Upvotes: 0