io.set('authorization', function (handshakeData, accept) {
if (handshakeData.headers.cookie) {
handshakeData.cookie = cookie.parse(handshakeData.headers.cookie);
if(handshakeData.cookie && handshakeData.cookie['PHPSESSID']){
var sessionClient = redis.createClient();
var sessionData;
sessionClient.get("PHPREDIS_SESSION:"+handshakeData.cookie['PHPSESSID'],function(err,reply){
console.log("reply:",reply);
sessionData = reply;
//sessionid|i:100;uid|i:100;username|s:4:\"from\";"
console.log(sessionData,handshakeData.cookie['PHPSESSID']);
if(!sessionData){
return accept('not login',false);
}
console.log(sessionData);
var dd = sessionData.split(";");
var uid ;
for(var i = 0 ; i < dd.length ; i++){
var d = dd[i];
var key = d.split("|")[0];
if(key == 'uid'){
var ser = d.split("|")[1].split(":");
uid = ser.length == 2 ? d.split("|")[1].split(":")[1] : ser[2].replace(/[\"\\]/g,"");
break;
}
}
console.log("uid",uid);
if(uid){
handshakeData.uid = uid;
return accept(null,true);
}else{
return accept('userid is empty',false);
}
});
}else{
console.log(handshakeData.cookie)
return accept(null, false);
}
}else{
return accept(null,false);
}
});
最后返回accept函数
如果返回accept(null,true)才会进行下面的各种连接
如果返回false,就不会进行socket连接了
然后可以在验证的加入一些参数,然后在socket中调用
socket.handshake.uid
类似上面设置的uid,在socket中这么调用