我有两个 Rails 应用程序,在同一个域上运行。它们都需要当前用户的一些知识。以前我们一直使用 localStorage 来处理这个问题,但是出于安全考虑,我们转向了数据库会话存储。
每个应用程序都有自己的数据库(并且暂时将)。我有没有办法告诉应用 B 使用应用 A 的会话存储?我可以为此在某处定义数据库和表关系吗?
我有两个 Rails 应用程序,在同一个域上运行。它们都需要当前用户的一些知识。以前我们一直使用 localStorage 来处理这个问题,但是出于安全考虑,我们转向了数据库会话存储。
每个应用程序都有自己的数据库(并且暂时将)。我有没有办法告诉应用 B 使用应用 A 的会话存储?我可以为此在某处定义数据库和表关系吗?
ActiveRecord::Base.establish_connection 应该会有所帮助。假设您的模型名称是应用程序 B 上的 Session,请尝试以下操作:
class Session < ActiveRecord::Base
establish_connection :adapter => 'mysql2', :database => 'database_of_app_a', :host => 'localhost', :username => 'database_of_app_a_username', :password => 'database_of_app_a_password'
end
我在具有相同数据库设置的同一主机上的 Rails 3 和 Rails 4 应用程序之间成功地做到了这一点。
它们在 initializers/secret_token.rb 中应该有相同的密钥
AppB::Application.config.secret_key_base = "same-as-app-a"
和在 initializers/session_store.rb 中设置的表名
AppB::Application.config.session_store :active_record_store
ActiveRecord::SessionStore::Session.table_name = 'app_a_sessions'
Rails 4 应用程序甚至没有登录页面——它重定向到 Rails 3 应用程序的登录页面并处理两者的身份验证。