服务/停止服务Socket.IO

林想知道如何才能服务socket.io只为login用户?

现在我只是添加/删除

<script src="/socket.io/socket.io.js"></script> <script> var socket = io(); </script> 

但当我成功的会话后删除它,页面不加载。 任何想法使用/服务socket.io只有用户与通行证会话身份validation?

这里的真正答案是使用SocketIO框架的所谓handshake 。 它允许你做一些检查,并决定是否允许用户连接到你的服务器。 其他答案根本不会自动允许用户连接。 但是,如果他只打开一个控制台,并实例化对你的服务器的套接字 – 他在线。

看看这个: http : //socket.io/docs/server-api/#namespace#use(fn : function) : namespace

在每次连接尝试中 ,您都可以运行特定function来查看事情是否正常。 然后你可以拒绝连接( next用一个参数调用),或者接受它 – next调用。

就是这样:)

但是,棘手的部分 – 如何实际validation用户? 每个套接字都通过来自客户端的简单HTTP请求来实例化。 稍后升级到套接字连接。

如果您正在使用某种数据库或会话,则可以使用其中的一个模块。 我一直在使用护照,所以一切都自动发生。 以下是有关如何执行此操作的更多信息: https : //github.com/jfromaniello/passport.socketio

 var io = require("socket.io")(server), sessionStore = require('awesomeSessionStore'), // find a working session store (have a look at the readme) passportSocketIo = require("passport.socketio"); io.use(passportSocketIo.authorize({ cookieParser: cookieParser, // the same middleware you registrer in express key: 'express.sid', // the name of the cookie where express/connect stores its session_id secret: 'session_secret', // the session_secret to parse the cookie store: sessionStore, // we NEED to use a sessionstore. no memorystore please success: onAuthorizeSuccess, // *optional* callback on success - read more below fail: onAuthorizeFail, // *optional* callback on fail/error - read more below })); function onAuthorizeSuccess(data, accept){ console.log('successful connection to socket.io'); // The accept-callback still allows us to decide whether to // accept the connection or not. accept(null, true); // OR // If you use socket.io@1.X the callback looks different accept(); } function onAuthorizeFail(data, message, error, accept){ if(error) throw new Error(message); console.log('failed connection to socket.io:', message); // We use this callback to log all of our failed connections. accept(null, false); // OR // If you use socket.io@1.X the callback looks different // If you don't want to accept the connection if(error) accept(new Error(message)); // this error will be sent to the user as a special error-package // see: http://socket.io/docs/client-api/#socket > error-object } 

传递一个参数给你的视图引擎

例如,我在这里使用手柄 –

 app.get('/view', ... res.render('view.html', { authenticated : true } ); 

在你看来

 {{#if authenticated }} <script src="/socket.io/socket.io.js"></script> <script> var socket = io(); </script> {{/if}} 

这不会以任何方式保护您的服务器

你也可以做一些像 –

 <script src="/socket.io/socket.io.js"></script> <script> var connect = {{authenticated}} ; if(connect) { var socket = io(); } </script>