最近在做一个项目,需要根据业务模块拆分出来多个项目来开发,在主项目直接登录,跳转到其它项目的时候,无需再次登陆。
1.如果两个项目共用一个数据库,可以这么用,将sesssion id存入数据库。
rails是4.1以上的话,gemfile添加
1
| gem 'activerecord-session_store'
|
生成migration
1
| rails generate active_record:session_migration
|
执行migration
修改session_store.rb,两个项目key,以及secrets.yml中的secret_key_base要保持一致,以保证同一客户端生成的session_id一致。
1
| Rails.application.config.session_store :active_record_store, key: '_test'
|
2.如果不是共用同一个数据库,可以通过redis来保存用户的登陆信息。
修改session_store.rb
1
| Rails.application.config.session_store :cookie_store, key: '_test'
|
修改secrets.yml的secret_key_base,保证两个项目同一个客户端生成的session相同。用户登陆后,保存用户信息到redis上。
1 2 3 4
| redis = Redis.new(:host=>'172.30.1.100', :port => 6380, :db => 2) redis.mapped_hmset(session.id,current_user.attributes)
|
读取用户信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| r = Redis.new(:host=>'172.30.1.100', :port => 6380, :db => 2) r.hmget('f7e046e16349c98f29b9d102c309219c','username') >> ["xulq"] r.hmget('f7e046e16349c98f29b9d102c309219c','username').first >> "xulq" r.hkeys('f7e046e16349c98f29b9d102c309219c') >>["id", "email", "encrypted_password", "reset_password_token", "reset_password_sent_at", "remember_created_at", "sign_in_count", "current_sign_in_at", "last_sign_in_at", "current_sign_in_ip", "last_sign_in_ip", "created_at", "updated_at", "username"] r.hlen('f7e046e16349c98f29b9d102c309219c') >>14
|
参考链接
https://github.com/rails/activerecord-session_store
http://www.cnblogs.com/richard1234/p/3783689.html