使用 Devise 在具有子域的多租户站点上自动登录用户

2024-02-23

在我的应用程序中,客户在 mysite.com 上注册。注册完成后,他们将获得一个网站,例如 customer.mysite.com。我正在使用 Devise,并希望客户立即登录到他们的网站。我正在使用多租户,如中所述Rails在这里投射 http://railscasts.com/episodes/388-multitenancy-with-scopes。我不太确定该怎么做。将sign_in 添加到after_sign_up_path_for def 的标准解决方案不起作用。我假设它正在尝试将客户登录到 mysite.com,而不是 customer.mysite.com。我包括了我的 after_sign_up_path_for def 这样你就可以看到我正在尝试但没有成功。我的 Devise 实现中的资源是用户,用户有一个站点。

注册控制器:

  def after_sign_up_path_for(resource)
    # Site.current_id = resource.site.id
    sign_in resource, bypass: true
    "http://#{resource.site.host}.#{ENV['BASE_HOST']}/sites/#{resource.site.id}/edit"
    # edit_site_url
  end

任何帮助表示赞赏。


我遇到了同样的问题并通过以下方式解决了它:

创建一个新模型(我将其称为 LoginKey),其中包含 user_id 和随机 SHA1 密钥。 当用户在父域(例如:mydomain.com/users/sign_in)上进行身份验证时,将创建一个新的 LoginKey,并将用户重定向到相应的子域,执行我称为 login_with_key 的操作(例如:user_subdomain.mydomain .com/users/login_with_key?key=f6bb001ca50709efb22ba9b897d928086cb5d755322a3278f69be4d4daf54bbb) 使用提供的密钥自动登录用户:

key = LoginKey.find_by_login_key(params[:key])

Sign_in(key.user) 除非 key.nil?

销毁钥匙:

密钥销毁

我百分百不喜欢这个解决方案,我尝试了很多不需要创建数据库记录的不同方法,但总是面临安全问题,我认为这个是安全的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Devise 在具有子域的多租户站点上自动登录用户 的相关文章

随机推荐