socketio mysql_SocketIO + MySQL身份验证

Wes Johnson..

6

你很接近,但我建议设置一个请求标题而不是设置查询字符串参数.data授权功能中的变量是握手数据,其中包含您可以使用的请求标头和cookie信息.以下是设置cookie的示例:

在服务器上

io.configure(function() {

io.set('authorization', function(handshake, callback) {

var cookie, token, authPair, parts;

// check for headers

if (handshake.headers.cookie &&

handshake.headers.cookie.split('=')[0]=='myapp') {

// found request cookie, parse it

cookie = handshake.headers.cookie;

token = cookie.split(/\s+/).pop() || '';

authPair = new Buffer(token, 'base64').toString();

parts = authPair.split(/:/);

if (parts.length>=1) {

// assume username & pass provided, check against db

// parts[0] is username, parts[1] is password

// .... {db checks}, then if valid....

callback(null, true);

} else if(parts.length==1) {

// assume only username was provided @ parts[0]

callback(null,true);

} else {

// not what we were expecting

callback(null, false);

}

}

else {

// auth failed

callback(null, false);

}

});

});

在客户端

在您致电之前,请socket.connect使用您的身份验证/用户信息设置一个cookie:

function writeCookie(value, days) {

var date, expires;

// days indicates how long the user's session should last

if (days) {

date = new Date();

date.setTime(date.getTime()+(days*24*60*60*1000));

expires = "; expires="+date.toGMTString();

} else {

expires = "";

}

document.cookie = "myapp="+Base64.encode(value)+expires+"; path=/";

};

// for a 'viewer' user:

writeCookie('usernameHere', 1);

// for the 'host' user:

writeCookie('usernameHere:passwordHere', 1);

除非您的浏览器支持,否则您需要在客户端使用Base64库btoa().

值得注意的是,这不是一个好的身份验证结构.直接在查询字符串或标头信息中传递用户凭证是不安全的.不过,这种方法可以让您更接近更安全的方法.我建议你查看一个像passport.js或everyauth这样的auth库.您可以在此代码中进行子操作,以利用这些库在运行检查时存储的会话信息.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值