2012-11-29 23 views
7

İki farklı bağlantı noktasında çalışan iki ayrı düğüm uygulamasına sahibim, ancak aynı arka uç veri deposunu paylaşıyorum. İki uygulama arasında kullanıcı oturumları paylaşmam gerekiyor, böylece bir kullanıcı bir uygulamada oturum açtığında oturumları kullanılabilir ve diğer uygulamada oturum açmış görünüyorlar. Bu durumda, 'halka dönük bir web sitesi ve idari bir arka plan. Paylaşılan Oturumlar?

  • biz bağlamak-Redis bize REDIS yoluyla oturumları paylaşmasına izin için kullandığınız Yerel Stratejisi ile kimlik doğrulama işlemek için kullanılıyor ekspres
  • pasaport ile

    • düğüm:

      Bizim kurulum şudur .

    • bizim etki şuna benzer: www.mydomain.com ve adm.mydomain.com

    seans şeyler (ve Redis) her iki uygulamada için aynıdır için için yapılandırma:

    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 oturum şeyler için yapılandırma şuna benzer: bize aynı sess görmelerine izin verin: Ben yapmaya bekliyoruz ne

    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' })); 
    

    iki uygulama arasındaki çerezde iyon kimliği.

    Bu yüzden sorum şu:: Oturumları farklı alt etki alanlarında paylaşabilmeniz için hızlı, yeniden yapılandırma ve pasaport nasıl ayarlayabilirim?

  • +2

    Sana gerekebilir düşünüyorum:

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

    Yani, böyle bir şey geçerli 1.10.1 usta için çalışacak Çerez alan adını ".mydomain.com" olarak belirtmek için - "En iyi". "*" Olmadan –

    +0

    ? Dün bir testte "* .mydomain.com" kullanıyorduk ve işe yaramadı. Bu sabah bunu deneyin ve sonucun ne olduğunu göreceğim. – jpittman

    +1

    Bir * * 'girdiniz, değil mi? Bu durumda, evet, sadece önde gelen nokta. Bence bu, farklı alt alanlardan okunabilir bir çerez oluşturuyor. Bana haber ver ve cevap olarak verebilirim. –

    cevap

    4

    Belki biraz modası geçmiş, ancak şu anda Express oturumu tanımlama bilgisi için etki alanı seçeneğini tanıyabilir. Kaynağa göre:

    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 || {} 
         ... 
    

    Ve bu ayarı çerezi içindir:

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

    Başlıklar için teşekkürler. Artık projede değilim ve Düğümde doğru miyavda çalışmıyorum, ama bu mükemmel bir haber. – jpittman

    2

    Express-session, tanımlama bilgileri için "etki alanı" seçeneğini ve dolayısıyla sorununuzu algılamıyor gibi görünüyor. Oturum kimliğini saklayan çerez, her uygulama için alan adına otomatik olarak bağlanır ve bu nedenle paylaşılamaz.

    Bir seçenek oturumları webapps'te paylaşmak için kendi tek oturum açma modülünüzü yazmaktır. Muhtemelen uygulama sırasına göre oldukça erken bir app.use() bildirimi içinde yaşayacak ve ayrı bir çerez oluşturacak (ayrı bir alan), ayrı bir SSO oturum kimliği oluşturacak ve bu yeni çerezde SSO kimliğini saklayacaktır. . Daha sonra, req.session ve req.sso oturumunu gerektiği gibi çapraz doldurmanız yeterlidir.