Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js和Redis Auth_Node.js_Redis - Fatal编程技术网

Node.js和Redis Auth

Node.js和Redis Auth,node.js,redis,Node.js,Redis,我没有关于使用redis auth的redis node.js文档 根据示例: var redis = require("redis"), client = redis.createClient(); // This command is magical. Client stashes the password and will issue on every connect. client.auth("somepass"); 在我的代码中,我有以下内容: var redis = requir

我没有关于使用redis auth的redis node.js文档

根据示例:

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

// This command is magical. Client stashes the password and will issue on every connect.
client.auth("somepass");
在我的代码中,我有以下内容:

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');
 });
以下是我得到的错误:

    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
Express服务器在开发模式下监听端口8070
/home/ubuntu/workspace/rtbopsConfig/rtbserver/rtbNodejsServer/node_modules/redis/index.js:468
抛出错误;
^
错误:身份验证错误:错误:错误:客户端已发送身份验证,但未设置密码
在Command.callback(/home/ubuntu/workspace/rtbopsConfig/rtbserver/rtbNodejsServer/node_modules/redis/index.js:163:43)
在RedisClient.return_错误(/home/ubuntu/workspace/rtbopsConfig/rtbserver/rtbNodejsServer/node_modules/redis/index.js:464:25)
在HiredisReplyParser。(/home/ubuntu/workspace/rtbopsConfig/rtbserver/rtbNodejsServer/node_modules/redis/index.js:253:14)
在HiredisReplyParser.emit(events.js:67:17)
在HiredisReplyParser.execute(/home/ubuntu/workspace/rtbopsConfig/rtbserver/rtbNodejsServer/node_modules/redis/lib/parser/hiredis.js:41:18)
在RedisClient.on_data(/home/ubuntu/workspace/rtbopsConfig/rtbserver/rtbNodejsServer/node_modules/redis/index.js:440:27)
在插座上。(/home/ubuntu/workspace/rtbopsConfig/rtbserver/rtbNodejsServer/node_modules/redis/index.js:70:14)
在Socket.emit(events.js:67:17)
在TCP.onread(net.js:367:14)
[7] +Killed node app.js 8070

那么,什么是正确的身份验证方法呢?

这是正确的身份验证方法

我相信您正在尝试使用旧版本的Redis服务器,其协议不受node_Redis支持(反之亦然)

或者,您可能没有连接到您认为受密码保护的实例,或者您没有在目标实例的配置中设置密码


我建议您尝试使用redis cli连接到实例,并使用auth测试身份验证(即绕过node.js)。

我在redis auth文档中找到了其他存在相同问题的人


你可能想从那里跟进

我怀疑你和我有同样的问题。通过将redis模块本身作为一个选项传递给Redistore构造函数,我成功地修复了我的问题:


如果没有它,RedisStore模块将无法将您传入的RedisClient对象识别为“真正的”RedisClient对象(因为它们将是来自不同redis的redis.RedisClient类),Redistore将重新创建它们并丢失您设置的身份验证。

此问题的另一个原因可能是启动redis服务器时未指定redis.conf(如果您在其中添加了“requirepass”)

在这种情况下,redis服务器以默认配置启动(即未启用“requirepass”选项),因此不接受您的AUTH命令

./src/redis-server redis.conf

较新版本中的Redis在默认情况下启用受保护模式,仅接受环回和unix域套接字

要从外部连接,请在redis.conf中绑定到
bind publicip anotherip等
要求通过foobred
。现在使用redis cli ping进行测试

如果没有
requirepass
任何人都可以
FLUSHALL
:)

启用防火墙以过滤端口访问以获得进一步保护,另请参阅

您可以(暂时)使用ssh隧道,而不是公开端口: 因为我想要一个简单且加密的隧道,所以在客户端运行:

 ssh -f -N -L 6379:127.0.0.1:6379 user@<serverip>
ssh-f-N-L 6379:127.0.0.1:6379用户@
在启动
节点index.js
之前,redis保存在其环回地址服务器端,我使用客户端上的端口转发(-f-N用于后台进程ps-x)和设置ssh密钥。

如果持续,您应该查看推荐的。

EADDRINUSE是一个http东西-您确定这是redis的问题,而不是设置服务器的问题吗?我也有同样的问题,我发现我在另一台服务器上编辑了配置以需要密码,而在我的暂存服务器上运行的服务器中没有
requirepass$uP3rs3cretpassW0rd
。。。瘸的但是现在一切都正常了。嗨,我用的是redis2.6。我还使用与auth一起工作的py-redis。Auth正在为node.js redis mranney以外的所有其他客户端工作。就连TornadRedis都能用,对我来说也很好。node.js和相关模块(即npm列表)的版本是什么?我的是v0.6.16,带有redis@0.7.2及hiredis@0.1.14…节点为v0.6.18。redis是redis@0.7.2