问题:我希望用户能够登录mydomain.com然后作为登录用户转发到他们自己的subdomain1.mydomain.com地址.现在他们只能直接登录到他们自己的子域.
我是一个相对Rails新手,我找不到一个简单的解决方案(虽然似乎必须有一个).理想情况下,我希望mydomain.com和subdomain1.mydomain.com共享一个cookie,但我的技能不适合编写自定义中间件.显然,由于它是多租户,我无法在所有子域中共享一个会话.坚持这几天,好奇是否有一个简单的解决方案(例如config.session_store域设置),在我开始查看OAuth或其他更麻烦的解决方案之前,我已经缺少这个解决方案.任何帮助将不胜感激!
编辑:当然我发布后才发现这个. Log a user into their subdomain after registration with Rails and Devise将尝试config.session_store域::所有前置过滤器推荐并发布任何细节,如果它不起作用,至少似乎是一个好主意.
编辑:解决方案适用于我的特定设计子域设置:
class ApplicationController < ActionController::Base before_action :check_subdomain def check_subdomain unless request.subdomain == "" or request.subdomain == session[:subdomain] redirect_to request.protocol+request.domain end endendsession_store.rbMy::Application.config.session_store :cookie_store,key: '_my_session',:domain => :all,:tld_length => 2
基本上我在登录时使用session [:subdomain]在会话中设置子域,并使用它将会话范围限定为当前用户.否则,当域设置为:all在session_store中时,它会破坏范围.如果用户未获得授权,则会通过request.protocol(http://或https://)request.domain重定向将其重定向到公共主页.简单!现在,用户可以在同一会话中在基本域及其子域之间移动.
解决方法 曲奇饼根据您发布的内容,我估计您在跟踪会话cookie时遇到问题.我们的子域驱动应用程序遇到了类似的问题,导致每次在两者之间切换时都会丢弃cookie
我们在这里找到了补救措施:
Share session (cookies) between subdomains in Rails?
#config/initializers/session_store.rbYour_App::Application.config.session_store :cookie_store,key: '_your_app_session',domain: :all,tld_length: 2
技巧是tld_length参数 – 这允许您定义可以容纳多少个“级别”的域; IE如果您使用的是子域,则需要设置tld_length来反映它
转发
我不确定你的转发是否有问题;无论如何我会给你一些想法.
当您登录到“子域”时,除非您拥有Rails的真正多租户实现(每个用户存储在不同的数据库中),您应该能够允许用户在主窗体上登录,并且然后将它们重定向到子域而不会出现问题
您需要考虑的是,只有在使用_url路径助手时才会填充子域约束:
<%= link_to "Your name",path_url(subdomain: "subdomain_1") %>
原因是_path帮助器相对于基本URL,因此无法填充子域选项.或者,_url路径助手完全指向URL – 允许您根据需要定义子域
–
如果您发送请求&继续希望用户保持登录状态,您需要确保能够跨子域保持身份验证. IE如果您在“主”页面上有单一登录表单,则需要确保可以继续对子域进行身份验证
总结以上是内存溢出为你收集整理的ruby-on-rails – 带有子域登录管理的Rails 4多租户全部内容,希望文章能够帮你解决ruby-on-rails – 带有子域登录管理的Rails 4多租户所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)