Angularjs 使用Socket.io、Angular、JWT身份验证数据在用户身份验证刷新后才可用

Angularjs 使用Socket.io、Angular、JWT身份验证数据在用户身份验证刷新后才可用,angularjs,node.js,authentication,socket.io,jwt,Angularjs,Node.js,Authentication,Socket.io,Jwt,我使用Angular和Socket.io、Socket jwt对套接字进行身份验证,并在前端使用Angular Socket io 加载页面时,客户端将尝试连接到socket.io服务器。它被拒绝,因为没有为客户端建立令牌 当建立套接字连接时,我正在解码服务器上的令牌,然后我想向客户端发送数据,包括socket.id,在那里我将更新模型和视图 用户进行身份验证后,直到刷新页面,socket.io数据才可用,然后发送到客户端 在用户登录并使数据可用后,如何建立socket.io连接 我尝试在用户登

我使用Angular和Socket.io、Socket jwt对套接字进行身份验证,并在前端使用Angular Socket io

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

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

用户进行身份验证后,直到刷新页面,socket.io数据才可用,然后发送到客户端

在用户登录并使数据可用后,如何建立socket.io连接

我尝试在用户登录后在登录控制器中使用socket.connect()和io.connect()调用套接字工厂

插座厂

 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;
});
登录控制器中的登录功能

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

如果
$window.localStorage.yourTokenKey
为空,您可能需要进行AJAX调用以获取初始令牌。AJAX或者您需要允许套接字连接存在,但标记为未经授权,以便能够从服务器向其发送值。