我在本地 nodejs 应用程序中面临一个 socketio 授权功能。在我的服务器上,授权功能工作得很好。只是在我的本地它不起作用。这是代码
var FeedsMain = global.FeedsMain = {}
, colors = require('./colors')
, conf = FeedsMain.conf = require('./conf').config
, SITE_SECRET = conf.app.secret
, zerorpc = require('zerorpc')
, rpcClient = new zerorpc.Client()
, feeds = require('socket.io').listen(conf.app.port)
, services = require('./lib/services')
, feedsService = services.getFeedsService()
, authService = services.getAuthService()
, profileVisitorsService = services.getProfileVisitorsService()
, searchService = services.getSearchService()
, usersService = services.getUserService()
, temptingEventsDistributionService = services.getTemptingEventsDistributionService()
, likesService = services.getLikesService()
, commentsService = services.getCommentsService()
, emitter = require('./lib/events').eventAPI
, eventAPI = require('./lib/events').eventAPI
, dataStore = require('./lib/events').store
, _ = require('lodash')
, cookie = require('cookie')
, authMap = {}
;
require('./clientResources').add(feeds);
rpcClient.connect('tcp://127.0.0.1:4242');
rpcClient.on('error', function(error) {
console.error('RPC client error:', error);
});
feeds.set('log level', 1);
feeds.set('authorization', function(handshakeData, accept) {
console.log('authorization function run');
if (handshakeData.headers.cookie) {
handshakeData.cookie = cookie.parse(handshakeData.headers.cookie);
var dg_01 = handshakeData.cookie['dg_01']
;
if(dg_01) {
rpcClient.invoke('getUser', dg_01, function(err, user) {
if(err) {
return accept('Unauthorized', false);
}
handshakeData.userId = user._id;
handshakeData.user = user;
handshakeData.sessionId = dg_01;
setSessionId(user._id, dg_01);
return accept(null, true);
});
}
else {
console.log('Invalid session id: %s'.red, dg_01);
return accept('Invalid Session!', false);
}
} else {
return accept('No cookie transmitted.', false);
}
});
console.log('authorization method over');
正如您会注意到的,所有变量都已初始化。基本上是套接字 io 初始化的 feeds 变量从端口 4000 开始。当我执行 localhost:4000 时,欢迎访问 socket.io。
但是授权功能不运行。我尝试插入一个 console.log('authorization function started') 但它没有发生。但是在控制台中我看到授权方法结束,这意味着授权功能被完全跳过。
在我的服务器上,一切正常,我看到来自授权功能的会话集等消息。在我的本地,它似乎不起作用。
任何人都知道可能是什么情况。