加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 在使用Rails和Devise注册后,将用户登录到其子

发布时间:2020-12-16 20:31:17 所属栏目:百科 来源:网络整理
导读:我在Rails 3应用程序中使用Devise进行身份验证.该应用程序使用PostgreSQL模式和Apartment gem来促进多租户. 在创建帐户后,登录和退出特定子域正在运行良好.用户只能在子域登录其特定帐户,这是非常好的. 这里是我遇到的问题… 一个全新的用户点击注册网址: h
我在Rails 3应用程序中使用Devise进行身份验证.该应用程序使用PostgreSQL模式和Apartment gem来促进多租户.

在创建帐户后,登录和退出特定子域正在运行良好.用户只能在子域登录其特定帐户,这是非常好的.

这里是我遇到的问题…

一个全新的用户点击注册网址:

http://foo.com/signup

默认情况下,当他们单击提交时,新帐户被创建,但是用户被发送到:

http://foo.com/dashboard

相反,我希望他们去:

http://myaccount.foo.com/dashboard

为了实现这一点,我在我的registrations_controller.rb文件中覆盖了after_sign_up_path_for方法:

def after_sign_up_path_for(resource)
  root_url(:subdomain => resource.account.subdomain)
end

这是按照预期工作的 – 它加载正确的URL – 但是为根域(foo.com)而不是子域创建了用户的会话,因此要求用户登录.

我发现一个建议是将config / initializers / session_store.rb更改为:

config.session_store :cookie_store,:key => '_domain_session',:domain => :all

但是这允许任何人登录到任何子域上的帐户,这显然不是很酷.

问题:如何确保在注册过程中创建的会话对于在注册过程中创建的子域是有效的

解决方法

你可以在你的config.session_store中使用domain::all选项,只要有一个before_action就像注释中的一些.

所以你仍然可以在config / initializers / session_store.rb或config / application.rb中的代码:

config.session_store :cookie_store,:domain => :all

然后在你的application_controller中添加以下代码:

#app/controllers/application_controller.rb
before_action :check_subdomain

def check_subdomain
  unless request.subdomain == current_user.account.subdomain
    redirect_to root_path,alert: "You are not authorized to access that subdomain."
  end
end

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读