Socket.io身份验证错误

时间:2012-06-10 16:03:35

标签: node.js express socket.io

我在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”。

由于

编辑:

有趣的事情发生了。它现在似乎在每个浏览器中都有效。但还是不知道问题在哪里。

0 个答案:

没有答案