Utilisation d'Express et de Node, comment gérer une session entre des sous-domaines / hostheaders

J'ai un seul nœud serveur qui répond aux demandes et redirige l'utilisateur basée sur les en-têtes d'hôte. L'usage est que le statique/page d'accueil du site vie au www et chaque utilisateur dispose de son propre sous-domaine (c'est à dire www.example.com et site.example.com). Le routage est que par site.js.

Lorsque l'utilisateur n'est pas connecté ils sont redirigé vers la de login.

Je suis en train de découvrir que la session n'est pas conservée lorsque l'utilisateur est redirigé vers leur sous-domaine. Je suppose que c'est prévu, mais je me demande si il existe un moyen de maintenir la même session sur les deux sous-domaines.

J'espérais que si elles ont été enregistrées et à retourner à www.example.com ils verraient d'un point de vue différent qui inclus un lien de déconnexion /leur tableau de bord, etc. Ma solution pour le moment, je pense, est de créer de la session sur leur sous-domaine et si ils reviennent sur www, il va juste être comme si ils ne sont pas connectés.

Personne traitée avant ou avoir des réponses sur la façon de gérer les sessions de cette manière?

Je pense que le problème peut être dans users.js où je me rediriger vers 'http://site.example.com" comme ce n'est pas un chemin d'accès relatif...

Voici le code (l'utilisateur recherche est effectuée à l'aide de MongoDB et j'ai laissé comme sa fine la ligne qui appelle ce service est utilisateurs.authentifier)...

server.js:

app.configure ->
app.set "views", "#{__dirname}/views"
app.set "view engine", "jade"
app.use express.bodyParser()
app.use express.methodOverride()
app.use express.cookieParser()
app.use express.session { 
    key: "KEY", 
    secret: "SECRET", 
    store: new MemoryStore(), 
    cookie: { 
        domain: 'example.com', 
        maxAge   : 1000*60*60*24*30*12 
    }
}
app.use express.static "#{__dirname}/public"
app.use express.logger "short"
app.use express.favicon "#{__dirname}/public/img/favicon.ico"
app.use app.router

site.js:

module.exports = (app) ->
app.get '/', (req, res) ->
    console.log "/hit with #{req.url} from #{req.headers.host}"
    domains = req.headers.host.split "."
    org = if domains then domains[0] else "www"
    if org == "www"
        res.render "index", { layout: null }
    else
        if req.session.user
            console.log "session established"
            res.render "app", { layout: null }
        else
            console.log "no session"
            res.redirect "http://www.example.com/accounts/login"    

users.js:

users = require('../services/users')
module.exports = (app) ->
app.get "/accounts/login", (req, res) ->
    res.render "login", { layout: null, locals: { returnUrl: req.query.returnUrl } }
app.post "/accounts", (req, res) ->
    users.authenticate app, req.body.login, req.body.password, (user) ->
        if user
            req.session.user = user
            res.redirect "http://#{user.orgName}.example.com"
        else
            res.render "login", { layout: null, locals: { returnUrl: req.body.url } }
app.get "/accounts/logout", (req, res) ->
    console.log "deleting user from session"
    delete req.session.user
    res.redirect "http://www.example.com                

De le tester en local sur mac OSX, j'ai ajouté www.example.com et site.example.com dans mon fichier hosts afin que les recherches DNS sont gérés localement.

source d'informationauteur mattgi