sando o Express e o Node, como manter uma Sessão entre subdomínios / hosts de cabeçalho

Tenho um servidor de nó único que responde a solicitações e redireciona um usuário com base nos cabeçalhos do host. O uso é que o site estático / residencial esteja em www e cada usuário tenha seu próprio subdomínio (por exemplo, www.example.com e site.example.com). O roteamento é conforme site.js.

Quando o usuário não está logado, ele é redirecionado para o logi

Estou descobrindo que a sessão não é mantida quando o usuário é redirecionado para o subdomínio. Eu acho que isso é esperado, mas estou me perguntando se existe uma maneira de manter a mesma sessão nos dois subdomínio

Eu esperava que, se eles estivessem conectados e retornassem ao www.example.com, eles veriam uma visão diferente que incluía um link para fazer logout / seu painel, etc. Minha solução no momento, penso, é apenas crie a sessão em seu subdomínio e, se eles retornarem a www, será como se não estivessem logados.

lguém já lidou com isso antes ou tem respostas sobre como lidar com sessões dessa maneir

Acho que o problema pode estar no users.js, onde redireciono para 'http://site.example.com', pois não é um caminho relativo ...

Aqui está o código relevante (a pesquisa do usuário é feita usando o MongoDB e eu o deixei de fora como está funcionando bem - a linha que chama esse serviço é users.authenticate) ...

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                

Para testá-lo localmente no OSX, adicionei www.example.com e site.example.com ao arquivo de hosts, para que as pesquisas de DNS sejam tratadas localment

questionAnswers(6)

yourAnswerToTheQuestion