使用Socket.io,Angular,JWTvalidation数据直到用户validation刷新后才可用

我正在使用Angular和Socket.io,socket-jwt用于身份validation套接字,以及angular-socket-io在前端。

当页面加载时,客户端尝试连接到socket.io服务器。 它被拒绝是因为它们没有为客户build立令牌。

当套接字连接build立时,我正在解码服务器上的令牌,然后我想向客户端发送数据,包括socket.id,我将更新模型和视图。

用户进行身份validation之后,直到页面刷新为止,socket.io数据才可用,然后发送到客户端。

如何在用户login并使数据可用后build立socket.io连接?

我曾尝试调用我的套接字工厂,用户login后使用login控制器内的socket.connect()和io.connect()。

sockets工厂

app.factory('socket', function ($window, socketFactory) { var token = $window.localStorage.yourTokenKey; var myIoSocket = 'http://localhost:8080'; var socket = io.connect(myIoSocket, {'query' : 'token=' + token}); return socket; }); 

login控制器loginfunction

 $scope.login = function() { AuthService.login($scope.user) .then(function(msg) { socket.connect(); $state.go('home'); }, function() { console.log('Login Failed'); }); }; 

服务器代码

 var socketIo = require('socket.io'); var io = socketIo.listen(server); io.use(socketioJwt.authorize({ secret: config.secret, handshake: true })); io.on("connection", function(socket) { var token = socket.handshake.query.token; var decoded = jwt.decode(token); var user = { name: decoded._doc.name, userId: decoded._doc._id, socketId: socket.id }; socket.emit('other event', user); });