2016-03-15 49 views
3

当我试图使用adapter: 'redis'它告诉我安装socket.io-redis 0.14版本。我这样做,并在所有的信息都输入到session.js文件:准备检查失败:NOAUTH需要验证

module.exports.session = { 
    adapter: 'socket.io-redis' 
    host: '10...', 
    port: 6379, 
    db: 'sails', 
    pass: '...', 
}; 

,现在当我尝试运行应用程序,我得到以下错误:

Error: Ready check failed: NOAUTH Authentication required. 

我不知道为什么pass: .。不管用?还有什么我该做的?

注:我使用Google计算实例进行Redis托管,我有一个允许访问的防火墙规则。

+0

也许你需要删除通过arg? – alexey

+0

@alexey我试过了,但没有改变任何东西,仍然有相同的错误。 – cfl

+0

你可以尝试添加这个'auth:process.env.redis_auth || null'? – alexey

回答

1

您必须指定auth_pass

module.exports.session = { 
    adapter: 'socket.io-redis' 
    host: '10...', 
    port: 6379, 
    db: 'sails', 
    pass: '...', 
    auth_pass: redis_url.auth.split(":")[1] 
}; 

UPDATE

documentation

password: null; If set, client will run redis auth command on connect. Alias auth_pass (node_redis < 2.5 have to use auth_pass)

+0

不知道如何做到这一点,我试过的东西不起作用。我创建var redis_url = require('socket.io-redis');在顶部,然后尝试像你提到的那样打电话。但是得到错误:不能调用undefined的方法'split'。 [1]应该具有什么样的价值? – cfl

+0

redis url类似于'http:// ip:port/redis' – alexey

+0

在Google计算引擎上创建Redis服务器并不会像其他平台似的那样使用url。感谢您的努力 – cfl

3

我没有找到我的问题的解决方案。我不确定它会对你有多大用处,因为我相信我的情况有点不同。我在一个bitnami Google云计算实例上使用了sails.js,并且我还在一个单独的bitnami实例上托管redis,这是我们共同的事情。但是,我试图连接到Redis以使用Kue。所以我没有使用我的配置/会话文件。尽管我们仍然遇到同样的错误,所以解决方案是删除redis实例中的requiredpass,然后使用防火墙规则,只允许我的服务器访问Redis实例。

我认为根本问题是redis有任何尝试读取/写入数据存储的第二个密码提示。因此,从服务器传递密码只会让您登录,但不会访问数据,而不是NOAUTH错误。所以我相信该实例的requiredpass主要针对客户端,服务器端实例不需要它。这可能是我在如何使用Redis时太天真了,但我不知道如何从其他服务器输入密码来提示。我觉得现在防火墙规则对我来说是好的,可以防止不必要的流量流出。

如果这是你想要做/尝试,那么我这样做是为了谷歌的云是SSH到Redis的实例(通过自己的命令行或通过浏览器一个,谷歌提供的方式是什么,然后编辑/opt/bitnami/redis/etc/redis.conf文件使用sudo权限,找到表示requiredpass的行,并通过在其前面加上#表示注释,现在为了使其生效,必须重新启动服务器 Bitnami说您可以使用sudo /opt/bitnami/ctlscript.sh restart redis来执行此操作。但是,我得到一个AUTH错误,所以为了解决这个问题,我必须强制终止sudo pkill -9 -f redis-server,然后用sudo /opt/bitnami/ctlscript.sh restart redis重新启动它,这会刷新配置文件,更新实例并允许服务器连接需要第二个提示密码被输入。

如果您有任何问题,请让我知道,我会尽力帮助。