Kết nối với redis được quản lý bằng nodejs tên người dùng / mật khẩu xác thực
Chỉnh sửa: Sau khi suy nghĩ về vấn đề này, câu hỏi thực sự là ví dụ về kết nối với redis được quản lý của digitalocean với node-redis bằng tls là gì?
Tôi có thể kết nối tốt với ứng dụng redisinsight GUI bằng tên người dùng / mật khẩu, nhưng không thể kết nối với nodejs. Nó trên cùng một máy tính nên không có vấn đề về tường lửa.
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')
});
Một điều tôi bối rối là nhập tên người dùng ở đâu? Nó chỉ là 'mặc định' nhưng tài liệu cho node_redis không cung cấp cách cung cấp tên người dùng trong quá trình xác thực.
Lỗi là: AbortError: Redis connection lost and command aborted. It might have been processed.
Đây là màn hình kết nối thị lực lại ẩn danh nhẹ đang hoạt động của tôi.
Làm cách nào để làm điều tương tự trong node-redis?

Trả lời
Các AUTH
lệnh, như đã nêu trong các tài liệu :
Khi ACL được sử dụng, dạng đối số duy nhất của lệnh, trong đó chỉ mật khẩu được chỉ định, giả định rằng tên người dùng ngầm định là "mặc định".
Vì vậy, ngay cả khi bạn đang sử dụng Redis 6, nơi người dùng bổ sung được hỗ trợ, xác thực của bạn cho default
sẽ hoạt động.
Lỗi bạn đang thấy là kết quả của kết nối bị hỏng , ví dụ như bằng cách nào đó bạn bị mất kết nối với máy chủ Redis. node-redis
đang xử lý một trong hai tình huống (hoặc cả hai) - kết nối đã hết thời gian chờ hoặc số lần cố gắng kết nối lại đã vượt quá số lượng tối đa được chỉ định trong cấu hình. Tôi sẽ kiểm tra lại thông tin kết nối của bạn và cách máy chủ redis của bạn được cấu hình.
Tôi thấy bạn đang sử dụng TLS, bạn có thể thấy điều này hữu ích: Bảo mật Node Redis
Nếu bạn muốn xác thực máy khách node-redis với một người dùng khác, khi sử dụng Redis 6, bạn sẽ phải sử dụng send_command
, nhưng trước khi bạn cần xóaAUTH
lệnh hiện tại , vì hiện tại node-redis không hỗ trợ lệnh mới AUTH <username> <password>
.
client['auth'] = null;
client.send_command('AUTH', ['<username>', '<password>'], redis.print);