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

在我的应用程序中,客户在mysite.com上注册。 注册完成后,会为他们提供一个站点,例如customer.mysite.com。 我正在使用Devise,并希望立即将客户登录到他们的网站。 我正在使用多租户,如RailsCast中所述。 我不太清楚如何解决这个问题。 将sign_in添加到after_sign_up_path_for def的标准解决方案无效。 我假设它试图将客户登录到mysite.com,而不是customer.mysite.com。 我包括我的after_sign_up_path_for def所以你可以看到我正在尝试的东西没有成功。 我的Devise实现中的资源是User,用户拥有Site。

RegistrationsController:

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 

任何帮助表示赞赏。

我有同样的问题,并通过以下方式解决:

创建一个包含user_id和随机SHA1密钥的新模型(我称之为LoginKey)。 当用户在父域进行身份validation时(例如: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?

销毁钥匙:

key.destroy

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