我在node.js + express + socket.io中编写应用程序并且遇到了奇怪的行为。 此代码适用于Chrome客户端,但在其他任何地方都存在身份验证错误。
服务器端:
express = require('express'),
app = module.exports = express.createServer(),
io = require('socket.io'),
connect = require('connect'),
cookie = require('cookie'),
RedisStore = require('connect-redis')(express),
Session = connect.middleware.session.Session;
app.configure(function(){
app.use(express.cookieParser('secretTajemstvi'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.session({
secret: 'secretTajemstvi',
key: 'express.sid',
store: SessionStore = new RedisStore(),
cookie: {
path: '/',
//expires: false,
maxAge: 3600000,
httpOnly: true
}
}));
app.use(app.router);
app.use(express.static(__dirname + '/public'));
});
io.listen(app).set('authorization', function (data, accept){
if (!data.headers.cookie)
return accept('No cookie transmitted', false);
data.cookie = cookie.parse(data.headers.cookie);
data.cookie.expires = false;
data.sessionID = data.cookie['express.sid'];
data.sessionStore = SessionStore;
SessionStore.get(data.sessionID, function (err, session) {
console.log(err, session);
if (err || !session)
return accept('Error', false);
data.session = new Session(data, session);
return accept(null, true);
});
}).sockets.on('connection', function (socket) {});
我从console.log()获得“undefined undefined”。
由于
编辑:
有趣的事情发生了。它现在似乎在每个浏览器中都有效。但还是不知道问题在哪里。