Angularjs 使用Socket.io、Angular、JWT身份验证数据在用户身份验证刷新后才可用
我使用Angular和Socket.io、Socket jwt对套接字进行身份验证,并在前端使用Angular Socket io 加载页面时,客户端将尝试连接到socket.io服务器。它被拒绝,因为没有为客户端建立令牌 当建立套接字连接时,我正在解码服务器上的令牌,然后我想向客户端发送数据,包括socket.id,在那里我将更新模型和视图 用户进行身份验证后,直到刷新页面,socket.io数据才可用,然后发送到客户端 在用户登录并使数据可用后,如何建立socket.io连接 我尝试在用户登录后在登录控制器中使用socket.connect()和io.connect()调用套接字工厂 插座厂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连接 我尝试在用户登
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或者您需要允许套接字连接存在,但标记为未经授权,以便能够从服务器向其发送值。