如何在登录时将会话令牌存储在数据库中?每次用户登录用户的会话令牌都应该更新,当它即将到期时,它应该更新到。我在rails指南中看到,使用rails g active_record:session_migration
将创建表,并将存储所有会话。然后是YourApp::Application.config.session_store :active_record_store
。会话将如何在此表中存储?我需要为此编写逻辑吗?请帮忙。
由于
答案 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会话存储。你可以用它作为基础 高性能数据库专用商店。