【发布时间】:2015-07-15 08:52:39
【问题描述】:
我正在我的 MEAN 堆栈项目中尝试使用 jwt 进行 socket.io 授权。我在注销并重新登录后遇到套接字对象不携带 jwt 令牌的问题。
当我登录时,令牌将存储在本地存储中
UsersSvc.login($scope.user).success(function(data){
if (data.success) {
store.set('jwt', data.token);
}
然后角度套接字工厂将从本地存储中检索 jwt 并发送到服务器
.factory('SocketSvc',[ 'store',
function (store) {
this.initSocket = function(){
return io.connect('http://localhost:3000',{ query : 'token=' + store.get('jwt')});
};
var socket = this.initSocket();
return {
on: function (eventName, callback) {
socket.on(eventName, function () {
var args = arguments;
$rootScope.$apply(function () {
callback.apply(socket, args);
});
});
},
emit: function (eventName, data, callback) {
socket.emit(eventName, data, function () {
var args = arguments;
$rootScope.$apply(function () {
if (callback) {
callback.apply(socket, args);
}
});
})
},
};
然而;退出后
$scope.logout = function(){
var account = UsersSvc.currentAccount();
SocketSvc.emit('logout', { account : account});
$state.go('anon.login');
};
然后 jwt toke 将从本地存储中删除
if (toState.name == "anon.login") {
store.remove('jwt');
当我再次登录时,套接字查询中的令牌在您成功登录时消失了。我正在处理这个问题几天。我不知道发生了什么。
让服务器再次获取令牌的唯一方法是手动刷新页面。 或关闭选项卡并打开一个新页面,然后重新登录。
我的假设是角度工厂的问题,因为它是无法修改的单例。
我不知道这是对还是错,也不知道如何解决问题。如果你有什么建议。请告诉我
【问题讨论】:
标签: angularjs node.js socket.io mean-stack