我有一个实时应用程序,它可以很好地工作在express+passportJS和没有套接字认证。当我添加passport.socketio时,我的问题是套接字只有当我重新启动服务器.时才会连接
服务器上有passportjs & passport.socketio,客户端有btford.socket-io的angularjs
angular.module('Socket', ['btford.socket-io'])
.factory('socket',['socketFactory', function(socketFactory){
var myIoSocket = io.connect("http://192.168.0.7:8080");
mySocket = socketFactory({
ioSocket: myIoSocket
});
return mySocket;
}]);当用户登录时,我正在执行socket.connect();。这在服务器端似乎没有做任何事情,我没有看到任何日志.
下面是passport.socketio的实现,如本教程所示
var io = require('socket.io').listen(app.listen(port));
var passportSocketIo = require("passport.socketio");
io.use(passportSocketIo.authorize({
cookieParser: cookieParser,
secret: 'secret',
store: sessionStore,
success: onAuthorizeSuccess,
fail: onAuthorizeFail,
}));
function onAuthorizeSuccess(data, accept){
log.debug('successful connection to socket.io');
return accept();
}
function onAuthorizeFail(data, message, error, accept){
log.debug('unsuccessful connection to socket.io');
if(error){
throw new Error(message);
}
return accept(new Error(message));
}奇怪的是,当我重新启动服务器时,可以看到大量日志消息,显示我试图连接的所有套接字实际上都连接了。
然后,它似乎允许用户通过套接字进行交换,并按预期工作。
有人知道会发生什么吗?
发布于 2015-08-27 04:17:52
当客户端打开页面时,客户端将进行连接,然后初始化握手。然后服务器检查身份验证并强制断开连接。然后,服务器不检查同一套接字连接的身份验证(不初始化握手)。你必须从客户端强制一个新的连接。
socket = io.connect(SOCKET_URL, {forceNew: true});你的代码
var myIoSocket = io.connect("http://192.168.0.7:8080",{forceNew: true});我也有同样的问题,这解决了我的问题。如果您强制一个新的连接,我希望它以前的所有事件侦听器都会丢失。您必须再次添加事件侦听器。
https://stackoverflow.com/questions/32219793
复制相似问题