मेरे पास एक एकल नोड सर्वर है जो अनुरोधों का जवाब देता है और होस्ट हेडर पर आधारित उपयोगकर्ता को रीडायरेक्ट करता है। उपयोग यह है कि स्थैतिक/होम साइट www पर रहती है और प्रत्येक उपयोगकर्ता का अपना उप डोमेन होता है (यानी www.example.com और site.example.com)। रूटिंग साइट.जे.एस. के अनुसार है।एक्सप्रेस और नोड का उपयोग, सबडोमेन/होस्टहेडर में सत्र को बनाए रखने के लिए कैसे करें
जब उपयोगकर्ता लॉग इन नहीं होता है तो उन्हें लॉगिन करने के लिए रीडायरेक्ट किया जाता है।
मुझे पता चल रहा है कि जब उपयोगकर्ता को उनके उप डोमेन पर रीडायरेक्ट किया जाता है तो सत्र बनाए रखा नहीं जाता है। मुझे लगता है कि यह उम्मीद की जा रही है, लेकिन मैं सोच रहा हूं कि दोनों उप डोमेनों में एक ही सत्र को बनाए रखने का कोई तरीका है या नहीं।
मैं उम्मीद कर रहा था कि अगर वे लॉग इन होते हैं और www.example.com पर लौटते हैं तो वे एक अलग दृश्य देखेंगे जिसमें लॉगआउट/उनके डैशबोर्ड आदि का एक लिंक शामिल था। इस समय मेरा कामकाज, मैं सोच रहा हूं, सिर्फ अपने सबडोमेन पर सत्र बनाना है और यदि वे www पर वापस आते हैं तो यह ऐसा होगा जैसे वे लॉग इन नहीं हैं।
किसी ने इस से पहले इस तरह से निपटाया है या इस तरह से सत्रों को संभालने के तरीके के बारे में जवाब दिया है?
मुझे लगता है कि इस मुद्दे को users.js में हो सकता है, जहां मैं अपने नहीं एक रिश्तेदार पथ के रूप में पुन: निर्देशित करने 'http://site.example.com' ...
यहाँ प्रासंगिक कोड है (उपयोगकर्ता देखने MongoDB का उपयोग किया जाता है और मैं अपने ठीक काम कर रहा है क्योंकि यह बाहर छोड़ दिया गया है - लाइन कि इस सेवा कॉल 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
पर OSX स्थानीय स्तर पर यह परीक्षण करने के लिए, मैं www.example.com और site.example.com में मेरी होस्ट फ़ाइल से इतना है कि DNS खोज के स्थानीय रूप से नियंत्रित किया हो जोड़ लिया है।
उपयोगकर्ता '$ .ajaxSetup' को प्रत्येक अनुरोध के लिए' प्रमाण पत्र: सत्य 'जोड़ने के लिए – Xerri
@Maksims "डोमेन का उपयोग करना यह स्थानीयहोस्ट पर अच्छी तरह से काम नहीं करेगा" - यह स्थानीयहोस्ट पर क्यों काम नहीं करता है? मेरे पास है: api.localhost: 3000 और localhost: 3000 - काम नहीं कर रहा है? : \ – AmpT
क्योंकि ब्राउज़र की सुरक्षा से कुकी चालू नहीं की जाएगी यदि वर्तमान डोमेन अपने परिभाषित डोमेन से मेल नहीं खाता है। विकास और मंच वातावरण के लिए आप डोमेन संपत्ति पर टिप्पणी कर सकते हैं, या इसे "लोकलहोस्ट" पर सेट कर सकते हैं। – moka