在我的应用程序中,客户在 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(使用前将#替换为@)