ruby-on-rails - Rails 不会遵循 Devise 可超时
问题描述
我正在展示 Devise timeoutable 的相关代码
用户.rb
class User < ApplicationRecord
devise :database_authenticatable, :recoverable, :rememberable, :validatable, :confirmable, :timeoutable
.....
end
和/config/initializers/devise.rb
config.timeout_in = 1.day
它工作得很好,最近我已经Rails Action Cable
为一些后台工作实现了,比如/app/channels/application_cable/connection.rb
module ApplicationCable
class Connection < ActionCable::Connection::Base
identified_by :current_user
def connect
self.current_user = find_verified_user
logger.add_tags "ActionCable", current_user.email
end
private
def find_verified_user
current_user = env['warden'].user
if current_user
current_user
else
reject_unauthorized_connection
end
end
end
end
取消订阅方法
def unsubscribed
# Any cleanup needed when channel is unsubscribed
$redis.del "user_#{ current_user.id }_online"
ActionCable.server.broadcast 'online_indicator', userId: current_user.id, online: false
end
并且在实施此 Rails 后,有时会在用户不活动后自动销毁会话,我的意思是注销。
我不知道这段代码发生了什么。
请问有人能看出来这是什么吗?
谢谢
解决方案
你确定你没有任何disconnect
方法或者在通道关闭时有什么清理 :current_user 吗?我认为问题是通道被关闭并且清理 current_user
推荐阅读
- clojure - 高阶函数中的 Clojure 运算符
- r - 定义重叠时间间隔的指标
- c# - 仅选择组合框字符串的一部分或每个索引可能存储两个值?
- html - 在表单中调用超过 1 个操作
- c# - Azure Batch 服务:故意删除任务时的 TaskStateMonitor
- python - 方程组的否定给出不同的答案
- c# - 在创建时使用 [x-ms-documentdb-partitionkey]
- c - 我们可以在模板源文件中使用 CMake foreach 吗?
- android - 如何在 onBindViewHolder 中调用 Context 和 Intent 对象
- angular - Angular CLI 是否会缩小/丑化资产?