您已经结束了,尽管我建议您设置请求标头,而不要设置查询字符串参数。
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.enpre(value)+expires+"; path=/";};// for a 'viewer' user:writecookie('usernameHere', 1);// for the 'host' user:writecookie('usernameHere:passwordHere', 1);除非您的浏览器支持,否则您将需要在客户端上使用base64库
btoa()。
重要的是要注意,这不是一个好的身份验证结构。直接在查询字符串或标头信息中传递用户凭据并不安全。但是,此方法使您更接近于更安全的方法。我建议您查看一个类似password.js或everyauth的身份验证库。您可以将此代码细分为利用那些库在运行检查时存储的会话信息。



