ruby-on-rails – 带有子域登录管理的Rails 4多租户

ruby-on-rails – 带有子域登录管理的Rails 4多租户,第1张

概述场景:使用子域和设计的多租户rails应用程序 问题:我希望用户能够登录mydomain.com然后作为登录用户转发到他们自己的subdomain1.mydomain.com地址.现在他们只能直接登录到他们自己的子域. 我是一个相对Rails新手,我找不到一个简单的解决方案(虽然似乎必须有一个).理想情况下,我希望mydomain.com和subdomain1.mydomain.com共享一个co 场景:使用子域和设计的多租户rails应用程序
问题:我希望用户能够登录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多租户所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/langs/1269863.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存