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