我正在构建一个多租户应用程序,其中帐户的范围在子域下。假设 acme.com 是我的应用程序,而埃尔默是我的用户,当埃尔默在 acme.com 注册时,他将被转移到 elmer.acme.com。我想在埃尔默注册后签下他,但我很难。我正在使用饼干。这是我的登录方法:
def sign_in(user)
cookies.permanent[:remember_token] = user.remember_token
current_user = user
end
这是我的用户#创建方法的一部分,用户在其中登录。
if @user.save
sign_in(@user)
redirect_to root_url(subdomain: @user.subdomain)
end
当埃尔默还在 acme.com 时,饼干正在设置。当埃尔默被重定向到 elmer.acme.com 时,cookie无效。
我可以在我的session_store
中设置domain: :all
,但这违反了要求。这意味着埃尔默将被签入elmer.acme.com
,buggs.acme.com
,并且基本上*.acme.com
。埃尔默的会话 cookie 只对 elmer.acme.com 和/或 acme.com 有效。
知道如何实现这一目标吗?我正在运行带有Ruby 1.9.3的Rails 3.2。
如果您要为用户创建/允许令牌登录,则可以:
- 在用户模型上具有令牌
- 使用该令牌登录(重定向到特定 URL,或在存在 :token 时添加到身份验证系统以登录)
重定向代码示例:
if @user.save
sign_in(@user)
redirect_to root_url(user_id: @user.id, subdomain: @user.subdomain, token: @user.token)
end