2015-08-26 78 views
1

我有一个实时的应用程序,可以正常工作与express + passportJS和没有套接字身份验证。 当我添加passport.socketio,我的问题是,插座只会当我重新启动服务器passport.socketio和客户端连接/重新连接只有当重新启动服务器

我已经得到& passport.socketio在服务器和客户端上我已经passportjs连接...有angularjs与btford.socket-io

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)); 
} 

的奇怪的是,当我重新启动服务器时,我可以看到很多日志消息,显示我尝试连接的所有套接字实际上都连接

然后它似乎让用户通过套接字交换,并按预期工作。

任何人都知道可能发生了什么?

回答

0

当客户端打开页面时,客户端将连接,然后握手被初始化。然后服务器检查身份验证并强制断开连接。然后,服务器不会检查相同套接字连接的身份验证(不会初始化握手)。您必须强制从客户端连接一个新连接。

socket = io.connect(SOCKET_URL, {forceNew: true}); 

您的代码

var myIoSocket = io.connect("http://192.168.0.7:8080",{forceNew: true}); 

我有同样的问题,这解决了我的问题。如果你强制一个新的连接,我希望所有以前的事件监听器都会丢失。您必须再次添加事件侦听器。

+0

谢谢,这似乎工作 – user1144446

相关问题