【发布时间】:2016-09-15 01:42:12
【问题描述】:
假设我正在运行一个多租户应用程序,该应用程序通过子域为每个组织提供自己的门户。
示例 -
orgA.application.comorgB.application.com- 等等……
每个子域从我的 PSQL 数据库中的不同架构/租户读取,但在其他方面是相同的应用程序。
在我的ApplicationController 中,我将current_user 设置为 -
def current_user
if session[:user_id]
@current_user ||= User.find_by_id(session[:user_id])
end
end
很少有像我这样的管理员/超级用户在每个子域上都有一个用户帐户。如果我使用我的用户 (id = 22) 登录 orgA,那么我的 session 将设置为 user_id: 22。
现在假设我想切换到 orgB,我的用户 ID 是 44。如果我在orgA 中设置会话后登录orgB,我是否有可能意外以orgB 上的22 用户身份登录自己?
更根本的是,我试图了解如何设置浏览器 cookie 会话。据我了解,它是在客户端浏览器中加密和缓存的变量散列。是每个子域设置的吗?或者特定站点的所有子域是否共享相同的缓存/会话 cookie?
更重要的是,如何防止上面示例中的会话异花授粉?我的current_user 方法是不是太基础了?
谢谢!
【问题讨论】:
标签: ruby-on-rails session cookies