การเชื่อมต่อกับ redis ที่ได้รับการจัดการด้วยโหนดชื่อผู้ใช้ / รหัสผ่านรับรองความถูกต้อง
แก้ไข: หลังจากคิดถึงปัญหาแล้วคำถามที่แท้จริงคือตัวอย่างของการเชื่อมต่อกับ redis ที่มีการจัดการของ digitalocean กับ node-redis โดยใช้ tls คืออะไร?
ฉันสามารถเชื่อมต่อได้ดีกับไคลเอนต์ redisinsight GUI โดยใช้ชื่อผู้ใช้ / รหัสผ่าน แต่ไม่สามารถเชื่อมต่อกับ nodejs ได้ อยู่ในคอมพิวเตอร์เครื่องเดียวกันจึงไม่มีปัญหาเรื่องไฟร์วอลล์
var redis = require('redis');
var client = redis.createClient(process.env.REDIS_PORT, process.env.REDIS_URL, {no_ready_check: true});
client.auth('password', function (err) {
if (err) {
console.log(err);
return
}
console.log('auth')
});
สิ่งหนึ่งที่ฉันสับสนคือจะป้อนชื่อผู้ใช้ที่ไหน? เป็นเพียง 'ค่าเริ่มต้น' แต่เอกสารสำหรับ node_redis ไม่ได้ระบุวิธีให้ชื่อผู้ใช้ในระหว่างการตรวจสอบสิทธิ์
ข้อผิดพลาดคือ: AbortError: Redis connection lost and command aborted. It might have been processed.
นี่คือหน้าจอการเชื่อมต่อการตรวจจับการเชื่อมต่อแบบ redisinsight ที่ทำงานได้โดยไม่เปิดเผยตัวตน
ฉันจะทำเช่นเดียวกันใน node-redis ได้อย่างไร
คำตอบ
AUTH
คำสั่งตามที่ระบุไว้ในเอกสาร :
เมื่อใช้ ACL รูปแบบอาร์กิวเมนต์เดียวของคำสั่งซึ่งระบุเฉพาะรหัสผ่านจะถือว่าชื่อผู้ใช้โดยนัยคือ "ค่าเริ่มต้น"
ดังนั้นแม้ว่าคุณจะใช้ Redis 6 ซึ่งรองรับผู้ใช้เพิ่มเติมการรับรองความถูกต้องของคุณdefault
ก็ควรใช้งานได้
ข้อผิดพลาดที่คุณเห็นเป็นผลมาจากการเชื่อมต่อที่ขาดเช่นคุณขาดการเชื่อมต่อกับเซิร์ฟเวอร์ Redis node-redis
กำลังจัดการกับหนึ่งในสองสถานการณ์ (หรือทั้งสองอย่าง) - การเชื่อมต่อหมดเวลาหรือความพยายามในการเชื่อมต่อใหม่เกินจำนวนสูงสุดที่ระบุในการกำหนดค่า ฉันจะตรวจสอบข้อมูลการเชื่อมต่อของคุณอีกครั้งและวิธีกำหนดค่าเซิร์ฟเวอร์ redis ของคุณ
ฉันเห็นว่าคุณใช้ TLS คุณอาจพบว่ามีประโยชน์นี้: การรักษาความปลอดภัยโหนด Redis
หากคุณต้องการการตรวจสอบโหนด Redis ลูกค้ากับผู้ใช้ที่แตกต่างกันเมื่อใช้ Redis 6 คุณจะต้องใช้send_command
แต่ก่อนที่คุณจะต้องลบในปัจจุบันAUTH
คำสั่งในปัจจุบันโหนด Redis AUTH <username> <password>
ไม่สนับสนุนคำสั่งใหม่
client['auth'] = null;
client.send_command('AUTH', ['<username>', '<password>'], redis.print);