如何允许客户使用域中的组织名称访问SaaS?
例如,Web应用程序example.com可能有2个客户,OrgA和OrbB.
登录后,每个客户都会被重定向到他们的站点orga.example.com/orgb.example.com.
一旦包含子域的请求到达节点服务器,我希望用单个'/'路由处理请求.在路由处理程序中,它只是检查主机头并将子域视为组织的参数.就像是:
app.get "/*", app.restricted, (req, res) ->
console.log "/* hit with #{req.url} from #{req.headers.host}"
domains = req.headers.host.split "."
if domains
org = domains[0]
console.log org
# TODO. do something with the org name (e.g. load specific org preferences)
res.render "app/index", { layout: "app/app" }
Run Code Online (Sandbox Code Playgroud)
NB.domains数组中的第一项是组织名称.我假设主机头中没有端口,现在,我不考虑如何处理非组织子域名(例如www,博客等).
因此,我的问题更多的是如何配置node/express来处理具有不同主机头的请求.这通常使用通配符别名在Apache中解决,或者在使用主机头的IIS中解决.
Apache/Rails示例是@ http://37signals.com/svn/posts/1512-how-to-do-basecamp-style-subdomains-in-rails
如何在节点中实现相同的目标?
我有一个单节点服务器响应请求并根据主机头重定向用户.用法是静态/家庭网站位于www,每个用户都有自己的子域(即www.example.com和site.example.com).路由按照site.js.
当用户未登录时,他们被重定向到登录.
我发现当用户被重定向到他们的子域时,会话不会被维护.我想这是预料之中的,但我想知道是否有办法在两个子域中维持相同的会话.
我希望如果他们登录并返回到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
Run Code Online (Sandbox Code Playgroud)
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 …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个HTML5/JS应用程序,并为我的后端使用Azure移动服务.
基于ScottGu的帖子,他演示了源代码控制和npm模块支持,我想知道是否可以使用socket.io来启用实时通知和WebSockets的使用.
我可以看到一个人如何能够引入模块并为每个特定请求使用它(例如,当客户端发送到资源时,添加一个钩子来向所有客户端广播资源的创建)但我不确定如何设置并共享socket.io对象.
NB.我知道iOS,Windows和Google基于推送通知的内置支持,但它(尚未)为基于Web的项目提供现成的解决方案 - 因此想要使用socket.io(或任何SignalR-esque等价物).