我正在用Ruby 2.4.0在Rails 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,仍然可以看到我的帐户数据。当我作为用户登录时,我还可以在其他域之间跳转。这对我来说是草率的,我想防止这种情况发生(最好不要使用公寓宝石,因为我的应用程序大部分都是公开共享的。我试着找了一些关于这方面的教程,但都无济于事。当我注销并以不同的用户身份登录时,同样的事情发生了,但他们的数据集发生了变化。
任何帮助,建议或帮助,我们将不胜感激!如果您需要任何进一步的帮助,请让我知道!
发布于 2018-04-17 03:10:52
您可以尝试添加另一个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辅助方法也很好。
发布于 2018-04-17 03:57:09
使用devise?还有ActsAsTenant。
然后根据正在使用的子域,使用自定义方法在控制器中设置租户。包括在设备会话控制器中,如果用户不属于当前租户(在登录之前已经设置),则将其发送回注册页面。
https://stackoverflow.com/questions/49864129
复制相似问题