如何在rails中的数据库中存储会话令牌?

时间:2013-12-05 21:10:15

标签: ruby-on-rails

如何在登录时将会话令牌存储在数据库中?每次用户登录用户的会话令牌都应该更新,当它即将到期时,它应该更新到。我在rails指南中看到,使用rails g active_record:session_migration将创建表,并将存储所有会话。然后是YourApp::Application.config.session_store :active_record_store。会话将如何在此表中存储?我需要为此编写逻辑吗?请帮忙。

由于

1 个答案:

答案 0 :(得分:1)

完整的详细信息在宝石的自述文件中:

https://github.com/rails/activerecord-session_store

  

您可以配置表名,主键和数据列。对于   例如,在config / application.rb的末尾:

ActiveRecord::SessionStore::Session.table_name = 'legacy_session_table' 
ActiveRecord::SessionStore::Session.primary_key = 'session_id'
ActiveRecord::SessionStore::Session.data_column_name = 'legacy_session_data' 
  

请注意,将主键设置为   如果不这样,session_id将使您免于拥有单独的id列   想要它。但是,您必须设置session.model.id = session.session_id   用手! ApplicationController上的前置过滤器是个好地方。

     

由于默认类是一个简单的Active Record,因此您可以获得时间戳   如果你将created_at和updated_at datetime列添加到   会话表,使定期会话到期快速。

     

您可以提供自己的会话类实现,无论是否   功能丰富的Active Record或裸机高性能SQL   存储,通过设置

ActionDispatch::Session::ActiveRecordStore.session_class = MySessionClass 
     

您必须实施以下方法:

self.find_by_session_id(session_id)
initialize(hash_of_session_id_and_data, options_hash = {}) 
attr_reader :session_id 
attr_accessor :data 
save 
destroy 
  

示例SqlBypass   class是一个通用的SQL会话存储。你可以用它作为基础   高性能数据库专用商店。