一个rails应用程序,两个域,每个域的不同会话

时间:2016-08-19 13:44:51

标签: ruby-on-rails session devise session-cookies

我有一个应用程序,有两个不同的域。他们跨用户模型。我有设计登录/退出。如何为每个域创建会话?

1 个答案:

答案 0 :(得分:1)

<强> 修改

您需要通过网址识别或识别您选择的域名。

按域识别的示例。但是,您需要根据您的环境进行调整

http://www.domain1.com

`rake g model域名:string,user:belongs_to

#domain.rb

Class Domain < ActiveRecord::Base
  belongs :user
end

#user.rb

Class User < ActiveRecord::Base
...
  has_many :domains
end
在你的rails控制台中

 User.find(1).domains.create(name:'www.domain1.com')
 User.find(1).domains.create(name:'www.domain2.com')

#application_controller.rb #EDITED

helper_method :current_domain

def current_domain
  domain = request.host
  Domain.find_by_name(domain)
end

你需要在会​​话控制器中修改你的新东西

#应用程序/视图/会话/ new.html.slim

<%= f.hidden_field :user, :domain_id, value: current_domain.try(:id)
你的config / initializer / devise.rb

中的

config.authentication_keys = [ :email, :domain_id ]

#应用程序/模型/ user.rb

devise authentication_keys: {email:true, login:false, domain_id:true}

def self.find_first_by_auth_conditions(warden_conditions) 
  conditions = warden_conditions.dup
  domain_id = conditions.delete(:domain_id)
  where(conditions).joins(:domains).where('domains.id = :value', {:value => domain_id }).first
end