Düzenleme: Socket.IO 1.0'da, ara katman yazılımı artık kullanıldı. Yetkilendirme şöyle yapılabilir:
io.use(function(socket, next) {
var handshake = socket.request;
next();
});
sadece next()
geri aramayı bir hata nesnesi geçmesi, soket reddetmek gerekir olsaydı. Aynı şey ad ile yapılabilir: Socket.IO içinde
io.of('/namespace').use(function(socket, next) {
var handshake = socket.request;
next();
});
Yetkilendirme bir geri geçtiği bir boolean karar verilir bir fonksiyonu gözden geçirmek. Bu fonksiyon, bir bağlantı, bir el sıkışma çalıştığı her seferde çalıştırır ve bu gibi görünüyor budur:
io.set('authorization', function (handshake, callback) {
callback(null, true);
});
fonksiyon callback()
iki parametre kabul eder. Birincisi, varsa, hata nedenidir ve ikinci parametre, bir istemcinin bağlanıp bağlanamayacağını belirleyen booledir. Varsayılan olarak, yetkilendirme yoktur, bu nedenle yukarıdaki kod örneğinde, bağlanan soketin true
ile geçişe izin verildiği senaryo gösterilir.
Socket.IO'daki el sıkışma, diğer tüm bilgi teknolojisi ile ilgili el sıkışmalarına benzer. Socket.IO'nun durumunda, bir müşterinin bağlanıp bağlanamayacağına karar verir ve bağlantıyı reddeder. El sıkışma bir XHR veya JSONP isteği ile başlatılır ve hiçbir yetkilendirme belirtilmemişse çok fazla işlem yapmaz, ancak handshake
veri nesnesinde geçirilen verilerde yardımcı olabilir.
Son sorunuzu yanıtlamak için, evet, handshake
nesnesine herhangi bir şey ekleyebilirsiniz. Eğer soket tabanlı özelliklerini saklayabilir çünkü
io.set('authorization', function (handshake, callback) {
handshake.foo = 'bar';
callback(null, true);
});
io.sockets.on('connection', function(socket) {
console.log(socket.handshake.foo); // bar
});
Bu, çok kullanışlıdır: Nesne böyle şeyler yapmanızı sağlar socket.handshake
nesneye, aynı değişken referanstır. Bunun yaygın kullanımı, Socket.IO tarafından iletilen çerezlere dayanarak oturum kimliğini tanımlayabildiğimiz Express çerçevesi ile eşleşen bir oturum tanımlanabilir.
teşekkürler kardeşim. Bu aradığım cevap bu. :) –
Bu daha fazla beğeni hak ediyor. El sıkışma soket olayları içinde socket.handshake üzerinden ulaşılabilir olması gerçeği çok yararlı lanetlenmiştir. – Deminetix
Eğer 'next (new Error (' Forbidden '))' i çağırırsam; '- bağlantım hakkında nasıl bilgi alabilirim? Ben orta yazılımdan .emit() yapamıyorum çünkü sonraki (yeni Hata ('')) daha fazla iletişimi reddediyor. – cadavre