【问题标题】:Issue while working with subdomains in rails 5在 Rails 5 中使用子域时出现问题
【发布时间】:2018-04-17 03:57:09
【问题描述】:

我正在使用Ruby 2.4.0Rails 5 中构建一个应用程序。

我的应用正在运行基于用户所属帐户的子域(一个帐户也将有许多与之关联的用户)。我想要完成的是锁定子域,以便用户只能登录或点击帐户模型中存在的子域。如果子域不存在,则应将它们重定向到帐户创建页面。

我现在在我的应用程序控制器中有一个方法:

  def require_account!
    redirect_to new_user_registration_url(subdomain: 'www') if !@account.present?
  end

它给了我这个 before_action 我可以进入我的控制器以防止有人看到该对象但是当我登录到应用程序时我可以在 thisdomain.lvh.me:3000/some_page 然后输入 anotherdomain.lvh.me:3000/some_page 并且仍然可以看到我的帐户数据。当我以用户身份登录时,我还可以在其他域之间跳转。这对我来说是草率的,我想防止这种情况发生(最好不使用公寓宝石,因为我的大部分应用程序都是公开共享的。我试图找到一些关于此的教程但无济于事。当我注销时并以不同的用户身份登录会发生同样的事情,但使用他们的数据集。

我们将不胜感激任何帮助、建议或帮助!如果您需要任何进一步的帮助,请告诉我!

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    您可以尝试添加另一个 before_action

    def authorize_user_domain!
      return unless @account&.has_subdomain?(current_subdomain) 
      render_404
    end
    

    我假设 account.rb 有子域关联,所以那里的代码看起来类似于:

    def has_subdomain?(subdomain)
      subdomains.include?(subdomain)
    end
    

    而且我认为在应用程序控制器中有 current_subdomain 辅助方法也很好

    【讨论】:

      【解决方案2】:

      使用设计?也是ActsAsTenant。

      然后根据他们正在使用的子域使用自定义方法在控制器中设置租户。包括在设计会话控制器中,如果用户不属于当前租户(在登录之前已经设置),则将它们发送回注册页面。

      Acts as tenant

      【讨论】:

        猜你喜欢
        • 2020-12-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-27
        • 1970-01-01
        • 1970-01-01
        • 2012-09-15
        • 1970-01-01
        相关资源
        最近更新 更多