0

我正在构建一个多租户应用程序,其中帐户的范围在子域下。假设acme.com是我的应用程序,Elmer是我的用户,当 Elmer 在 acme.com 注册时,他会被转移到 elmer.acme.com。我想在 Elmer 注册后签到他,但我很难过。我正在使用cookies。这是我的登录方法:

  def sign_in(user)
    cookies.permanent[:remember_token] = user.remember_token
    current_user = user
  end

这是我的 Users#create 方法的一部分,用户可以在其中登录。

if @user.save
  sign_in(@user)
  redirect_to root_url(subdomain: @user.subdomain)
end

当 Elmer 仍在acme.com 时,cookie 正在设置。当 Elmer 被重定向到elmer.acme.com时,cookie 无效。

我可以domain: :all在 my中设置session_store,但这打破了要求。这将意味着 Elmer 将加入elmer.acme.com,buggs.acme.com和本质上*.acme.com。Elmer 的会话 cookie 应仅对elmer.acme.com和/或acme.com有效。

知道如何实现这一目标吗?我正在运行带有 Ruby 1.9.3 的 Rails 3.2。

4

1 回答 1

1

如果您要为您的用户创建/允许令牌登录,那么您可以:

  1. 在用户模型上有一个令牌
  2. 使用该令牌登录(重定向到特定 URL,或添加到您的身份验证系统以在存在 :token 时登录)

示例重定向代码:

if @user.save
  sign_in(@user)
  redirect_to root_url(user_id: @user.id, subdomain: @user.subdomain, token: @user.token)
end
于 2012-06-14T22:48:09.937 回答