首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >socket.io-redis不断抛出NOAUTH错误

socket.io-redis不断抛出NOAUTH错误
EN

Stack Overflow用户
提问于 2017-04-27 00:14:13
回答 1查看 3.8K关注 0票数 0

我试图连接到密码受保护的redis服务器,但由于某些原因,我一直收到错误:

events.js:141抛出er;//未处理的“错误”事件^ ReplyError:就绪检查失败:需要NOAUTH身份验证。(/home/ubuntu/TekIT/ITapp/node_modules/redis-parser/lib/parser.js:193:12) at parseType (/home/ubuntu/TekIT/ITapp/node_modules/redis-parser/lib/parser.js:303:14)

我知道密码是正确的,因为我在redis-cli中尝试过,而且它工作正常。以下代码如下:

代码语言:javascript
复制
var redis = require('redis');

var client = redis.createClient(redisPort, redisHostname, { auth_pass: 'password1' });


var redisSubscriber = redis.createClient(redisPort, redisHostname, { auth_pass: 'password1' });




// Create and use a Socket.IO Redis store
var RedisStore = require('socket.io-redis');
io.set('store', new RedisStore({
    redisPub: client,
    redisSub: redisSubscriber,
    redisClient: client
}));

有人知道我为什么会犯这个错误吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-27 08:03:03

您应该在socket.io-redis事件之后初始化ready

此外,还应该调用client.auth('password1', ()=>{})函数。

请查看文档的这一部分:

当连接到需要身份验证的Redis服务器时,必须将AUTH命令作为连接后的第一个命令发送。这可能很难与重新连接、就绪检查等进行协调。为了使这更容易,client.auth()存储密码,并在每个连接之后发送密码,包括重新连接。回调只在发送到第一个AUTH命令的响应之后调用一次。注意:对client.auth()的调用不应该在就绪处理程序中。如果您做错了此操作,客户端将发出一个类似于此错误的错误: Ready : ERR操作不允许。

试试下面的代码:

代码语言:javascript
复制
var redis = require('redis');
const redisPort = 6379
const redisHostname = 'localhost'
const password = 'password1'

var p1 = new Promise((resolve, reject)=>{
    var client = redis.createClient(redisPort, redisHostname, { auth_pass: 'password1' });
    client.auth(password)
    client.on('ready', ()=>{
        resolve(client)
    })
})

var p2 = new Promise((resolve, reject)=>{
    var redisSubscriber = redis.createClient(redisPort, redisHostname, { auth_pass: 'password1' });
    redisSubscriber.auth(password)
    redisSubscriber.on('ready', ()=>{
        resolve(redisSubscriber)
    })
})

Promise.all([p1,p2]).then(([client, redisSubscriber])=>{
    console.log('done', client)
    client.ping((err, data)=>{
        console.log('err, data', err, data)
    })

    // Create and use a Socket.IO Redis store
    var RedisStore = require('socket.io-redis');
    io.set('store', new RedisStore({
        redisPub: client,
        redisSub: redisSubscriber,
        redisClient: client
    }));
})
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43646577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档