一个 rails 应用程序,两个域,每个域不同的会话
One rails application, two domains, different session for each
我有一个应用程序,有两个不同的域。他们在用户模型中交叉。我有设计符号 in/out。如何为每个域创建会话?
编辑
您需要通过 url 来识别或通过 select 来识别您所在的域名。
按域识别的示例。但是,您需要使其适应您的环境
http://www.domain1.com
`rake g 模型域 name: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
你需要修改你新的会话控制器
#app/views/sessions/new.html.slim
<%= f.hidden_field :user, :domain_id, value: current_domain.try(:id)
在你的 config/initializer/devise.rb
config.authentication_keys = [ :email, :domain_id ]
#app/models/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
我有一个应用程序,有两个不同的域。他们在用户模型中交叉。我有设计符号 in/out。如何为每个域创建会话?
编辑
您需要通过 url 来识别或通过 select 来识别您所在的域名。
按域识别的示例。但是,您需要使其适应您的环境
http://www.domain1.com
`rake g 模型域 name: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
你需要修改你新的会话控制器
#app/views/sessions/new.html.slim
<%= f.hidden_field :user, :domain_id, value: current_domain.try(:id)
在你的 config/initializer/devise.rb
config.authentication_keys = [ :email, :domain_id ]
#app/models/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