2012-11-29 20 views
7

私は現在、2つの別々のノードアプリケーションを2つの異なるポートで実行していますが、同じバックエンドデータストアを共有しています。私は2つのアプリケーション間でユーザーセッションを共有する必要があります。そのため、ユーザーが1つのアプリケーションからログインしたときにセッションが利用可能になり、他のアプリケーションにログインしているように見えます。この場合、その「公の場のウェブサイト」と管理バックエンド。 ノードアプリケーション間の共有セッション

  • 我々が接続-Redisの私たちはRedisのを経由してセッションを共有できるようにするために使用しているローカル戦略で認証を処理するために使用されている特急
  • パスポートと

    • ノード:

      私たちのセットアップは以下のとおりです。 。

    • 私たちのドメインは、次のようになります。www.mydomain.comとadm.mydomain.com

    セッションのもの(とRedisの)のためのための設定は、両方のアプリケーションで同じです:

    session: { 
        options: { 
         secret: "my secret", 
         cookie: { 
          domain: "mydomain.com", 
          maxAge:1000*60*60*24 
         } 
        }, 
        redis: { 
         host: 'my host', 
         maxAge: 86400000, 
         secret: "my secret" 
        } 
    } 
    

    app.jsでのセッションのもののための設定は以下のようになります。私たちは同じのSESを参照することを許可する:私はそれがを行うことを期待するもの

    if (app.settings.env === "production") { 
        session.options.store = new RedisStore(session.redis); 
    } 
    app.use(express.session(session.options)); 
    app.use(passport.initialize()); 
    app.use(passport.session({ secret: 'a different secret' })); 
    

    2つのアプリの間のクッキー内のイオンID。

    私の質問はです:異なるサブドメイン間でセッションを共有できるように、Express、Redis、Passportを設定するにはどうすればよいですか?

  • +2

    私はあなたが必要とするかもしれないと思いますクッキードメインを '" .mydomain.com "'として指定する - 先頭の '.'に注意してください。 –

    +0

    "*"を付けないでください。私たちは昨日テストで "* .mydomain.com"を使いましたが、それはうまくいかないようでした。 私は今朝これを試して、結果が何であるかを見ていきます。 – jpittman

    +1

    '*'と入力しましたか?その場合、ええ、先行するドットだけ。私はこれが、さまざまなサブドメインからのクッキーの読み取りを可能にするものだと思います。私に知らせて、私は答えとしてそれを供給することができます。 –

    答えて

    4

    おそらく少し古いかもしれませんが、現時点では、ExpressセッションはCookieのドメインオプションを認識できます。

    function session(options){ 
        var options = options || {} 
        // name - previously "options.key" 
        , name = options.name || options.key || 'connect.sid' 
        , store = options.store || new MemoryStore 
        , cookie = options.cookie || {} 
         ... 
    

    そして、これはクッキーを設定するためのものである:ソースによると

    ので
    var Cookie = module.exports = function Cookie(options) { 
        this.path = '/'; 
        this.maxAge = null; 
        this.httpOnly = true; 
        if (options) merge(this, options); 
        ... 
    

    、このようなものは、現在の1.10.1のマスターのために動作します:

    secret: "my secret", 
        cookie: { 
         domain: "mydomain.com", 
    
    +0

    ヘッドアップありがとう。私はもはやプロジェクトではなく、Node right meowで作業していませんが、これは素晴らしいニュースです。 – jpittman

    2

    ExpressセッションではCookieの「ドメイン」オプションが認識されないようです。セッションIDを格納しているCookieは、各アプリのドメインに自動的に関連付けられているため、共有することはできません。

    1つのオプションは、Webアプリケーション間でセッションを共有するための独自のシングルサインオンモジュールを作成することです。実行順序のかなり早い段階でapp.use()宣言の中におそらく存在し、別のクッキー(クロスドメインとなる)を作成し、別個のSSOセッションIDを作成し、この新しいクッキーにSSO IDを格納します。その後、必要に応じてreq.sessionとreq.sso-sessionをクロスポピュレートするだけです。

    関連する問題