2013-11-22 52 views
0

即時通訊非常小巧,我有這個功能來進行授權。expressd中的鎖定授權功能

io.set('authorization', function (handshakeData, accept) { 
    // check if there's a cookie header 
    if (req.session.user) { 
     accept(null, true); 
    }else{res.redirect("/"); 
     accept("NO AUTORIZADO!", false); 

    } 



    }); 
    next() 
}); 

我希望用戶在會話中使用WebSockets連接

+0

那麼你有什麼問題? – OGHaza

回答

1

假設您使用express和redis作爲會話存儲,您可以使用以下代碼來驗證會話。

var cookie = require('cookie'), 
    connect = require('connect'); 

io.set('authorization', function (handshakeData, accept) { 
if (handshakeData.headers.cookie) { 
    handshakeData.cookie = cookie.parse(handshakeData.headers.cookie); 
    handshakeData.sessionID = 'sess:'+connect.utils.parseSignedCookie(handshakeData.cookie['connect.sid'], config.session_secret); 
    sredis.get(handshakeData.sessionID, function (err, session) { 
     if (err || !session) { 
      accept('could not load the session', false); 
     } else { 
      handshakeData.session = JSON.parse(session); 
      accept(null, true); 
     } 
    }); 
} else { 
    return accept('No cookie transmitted.', false); 
} 
});