2012-05-06 5 views
7

Ứng dụng chính của tôi là một ứng dụng Django, tuy nhiên, đối với một số công cụ thời gian thực, tôi muốn sử dụng Node/Socket.IO. Tôi đang sử dụng Redis để làm một số quán rượu/phụ từ Django để Node (và sau đó vào các khách hàng khác nhau). Phần khó khăn là làm thế nào để tôi xác thực người dùng Node chống lại auth Django?Làm cách nào để xác thực người dùng trong ứng dụng Nút bằng xác thực Django?

Trong ứng dụng Node tôi, tôi có:

io.on('connection', function (socket) { 
    const subscribe = redis.createClient(); 
    var userId = authenticateAndGetUserId(); 
    subscribe.subscribe(userId + ':feed-items'); 

    subscribe.on('message', function (channel, message) { 
    socket.emit('feed-items', JSON.parse(message)); 
    }); 

}); 

Vì vậy, câu hỏi của tôi là một chiến lược tốt để thực hiện authenticateAndGetUserId là gì? Các phiên được hỗ trợ trong MySQL, vì vậy tôi có thể đi qua đó. Chỉ cần tò mò nếu có một cách tốt hơn để đi về nó.

Trả lời

4

Ở bên Django, tôi sẽ hiển thị API REST. Sau đó trên Node.js bạn có thể làm một cái gì đó giống như POST username/password để

http://yourdjangoserver.com/authenticate

nào sẽ trở lại một số JSON với thông tin mà bạn cần. Nếu bạn muốn bảo vệ API khỏi sự giám sát của công chúng thì hãy làm cho nó riêng tư hoặc bảo vệ nó bằng một cái gì đó giống như auth cơ bản.

khôi phục là gói npm giúp dễ dàng làm việc với các API REST ở phía Node.js. Điều tốt về kiến ​​trúc này là nó được kết hợp lỏng lẻo. Bạn có thể thay thế Django bằng bất cứ thứ gì và khách hàng sẽ không bao giờ biết.

+2

Điều này. Tôi tạo một trường 'api key' trong mô hình hồ sơ người dùng Django của tôi, với khóa được tạo ngẫu nhiên. Sau đó bạn có thể có một điểm cuối HTTP/API đơn giản lấy khóa đó và xác định xem nó có thuộc về một người dùng hợp lệ hay không. – maroonmed

+0

Điều đó có làm cho việc chặn node.js không? Việc sử dụng node.js trong trường hợp này là gì? –

+0

Tôi không hiểu tại sao điều đó sẽ khiến Node.js chặn – deltanovember

2

Vì bạn đã có máy chủ redis, bạn có thể lưu trữ các cặp (username, sessionkey) cho mỗi người dùng đã đăng nhập, tùy chọn với giá trị TTL tương ứng với cài đặt phiên của bạn.

Sau đó, mỗi lần người dùng yêu cầu đăng ký kênh anh ấy gửi tên người dùng của mình, sau đó được kiểm tra với cửa hàng dữ liệu redis.

+1

tôi thích cái này. – emostafa