Sử dụng socket.io, tôi đã thực hiện việc này một cách đơn giản. Tôi giả sử bạn có một đối tượng cho ứng dụng của bạn giả sử MrBojangle, cho tôi nó được gọi là Shished:
/**
* Shished singleton.
*
* @api public
*/
function Shished() {
};
Shished.prototype.getHandshakeValue = function(socket, key, handshake) {
if(!handshake) {
handshake = socket.manager.handshaken[ socket.id ];
}
return handshake.shished[ key ];
};
Shished.prototype.setHandshakeValue = function(socket, key, value, handshake) {
if(!handshake) {
handshake = socket.manager.handshaken[ socket.id ];
}
if(!handshake.shished) {
handshake.shished = {};
}
handshake.shished[ key ] = value;
};
Sau đó, trên phương pháp uỷ quyền của bạn, tôi đang sử dụng MongoDB cho việc lưu trữ phiên:
io.set('authorization', function(handshake, callback) {
self.setHandshakeValue(null, 'userId', null, handshake);
if (handshake.headers.cookie) {
var cookie = connect.utils.parseCookie(handshake.headers.cookie);
self.mongoStore()
.getStore()
.get(cookie['connect.sid'], function(err, session) {
if(!err && session && session.auth && session.auth.loggedIn) {
self.setHandshakeValue(null,
'userId',
session.auth.userId,
handshake);
}
});
}
Sau đó, trước khi lưu bản ghi trong mô hình, bạn có thể làm:
model._author = shished.getHandshakeValue(socket, 'userId');
Những gì tôi đã làm chỉ là cho mỗi người dùng một uuid khi đăng nhập và thay đổi nó khá thường xuyên, sau đó sử dụng nó trong các thông báo ổ cắm để xác minh rằng họ thực sự là người mà họ đã nói. – MrBojangles