1

わかりました。私は Node.js に比較的慣れていません。

セッションを機能させ、socket.io メソッドでアクセスできるようにしようとしています。

この素晴らしいチュートリアルといくつかの追加コードをここで見つけました:

http://www.danielbaulig.de/socket-ioexpress/

http://howtonode.org/socket-io-auth/server.js

以下に示すコードになりました。奇妙なことに、これは今日一日中問題なく機能していました...単純な Jade と CSS の作業を行っていたところ、ヘッダーで Cookie が渡されなくなりました (つまり、最初の if ステートメントが渡されませんでした)。

今までチャンピオンのように働いていたredisストアを使用しています。

私が読んだところ、ローカルホストではなくIPを使用すると言った人もいました(つまり、 Socket.IO を使用してCookieからExpressセッションIDを取得できません)が、あまり役に立たなかったようです。

使用しているポートをいじってみました...何もしませんでした。

コードの下に、handshakeData.headers オブジェクトのダンプを入れました...何を見ているのかわかりません。

io.set('authorization', function (handshakeData, accept) {
    if (handshakeData.headers.cookie) {
        handshakeData.cookie = cookie.parse(handshakeData.headers.cookie);
        handshakeData.sessionID = connect.utils.parseSignedCookie(handshakeData.cookie['express.sid'], 'big pixel is awesome');
        handshakeData.sessionStore = sessionStore;

        sessionStore.get(handshakeData.sessionID, function (err, session) {
            if (err || !session) {
                // if we cannot grab a session, turn down the connection
                accept('Error', false);
            }
            else {
                // save the session data and accept the connection
                handshakeData.session = new Session(handshakeData, session);
                accept(null, true);
            }
        });
    }
    else {
        console.log('BAD - No cookie for you.')
        return accept('No cookie transmitted.', false);
    }

    accept(null, true);
});

ヘッダーダンプ

{ headers: 
   { host: '127.0.0.1:65258',
     connection: 'keep-alive',
     'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36',
     origin: 'http://localhost:65258',
     accept: '*/*',
     referer: 'http://localhost:65258/',
     'accept-encoding': 'gzip,deflate,sdch',
     'accept-language': 'en-US,en;q=0.8' },
     address: { address: '127.0.0.1', port: 65333 },
     time: 'Sun Nov 10 2013 23:28:09 GMT-0500 (EST)',
     query: { t: '1384144089105' },
     url: '/socket.io/1/?t=1384144089105',
     xdomain: true,
     secure: undefined,
     issued: 1384144089109 }

何かご意見は?

更新 OK、それで私はもう少し遊んで、安全な Cookie から 1 でないものに変更しました...次のように:

// Configuration
app.configure(function () {
    app.set('views', __dirname + '/views');
    app.set('view engine', 'jade');
    app.use(express.static(__dirname + '/public'));

    app.use(express.methodOverride());
    app.use(express.cookieParser());
    app.use(express.bodyParser());

    app.use(express.session({
        secret: "SECRET!!",
        store: redisStore,
        key: 'express.sid',
        cookie: { secure: false, maxAge:86400000 } // <-- I changed this from true to false
    }));
    app.use(app.router);
});

これで修正されたように見えますが、そもそも Cookie が送信されたかどうかにかかわらず、なぜこれが変わるのかまだわかりません...

4

0 に答える 0