example.com、auth.example.com、およびapi.example.comの3つのサブドメインを持つプラットフォームを構築するのに忙しいです。それらは3つの別々のNodeJSアプリがサーバーの異なるポートで実行されて実行されます。ここでノードアプリケーション間でRedisセッションを共有する
がセッションを設定するコードです:
var session = require("express-session");
var redisStore = require("connect-redis")(session);
var redisClient = require("redis").createClient(config.redis);
app.use(session({
secret: config.server.secret,
store: new redisStore(config.redis),
client: redisClient,
resave: false,
saveUninitialized: false,
cookie: {
domain: "example.co.za",
httpOnly: false
}
}));
構成は正確にすべての3つのアプリケーションで同じであり、それらは同じサーバー上に座っています。何らかの理由で、セッションが共有されていません。私は彼らが数週間前に共有されていたことを覚えているようですが、今は物事が壊れています - 私はすべてのトラフィックをHTTPからHTTPSに移動したときにこれが起こったという不機嫌な疑惑を抱いています。これはセッションを壊すだろうか?私はセッションを制限した場合には 'httpOnly'を回そうとしましたが、運はありませんでした。
私はredid-cli MONITOR
を実行していますが、セッションは実際にはログイン(認証アプリケーション)に保存されていますが、他のアプリでは取得されていません。 saveUninitialized
をtrueにすると、保存リクエストは3つのアプリケーションすべてから行われていました。これは、同じRedis Storeに接続されていることを示しています。
助けがあれば助かります。
を発行した場合には
。また、ヘッダー(特に 'Set-Cookie')をチェックし、[this]を見てください(http://stackoverflow.com/questions/7834228/set-cookie-for-domain-instead-of-subdomain-using- nodejs-and-expressjs)。これはコメントのための質問には大きすぎるかもしれませんが、あなたの認証とエンドポイントにセッションが必要な理由はありますか? – dvlsg
以下の答えが私の問題を解決しました。しかし、助けてくれてありがとう。すべての好奇心を満たすために、authはログイン後にセッションを作成していましたが、アクセスを許可する前にセッションがアクティブであることを確認して内部のデータを確認する必要がありました。 – nickcorin