首页 > 解决方案 > 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 后,有时会在用户不活动后自动销毁会话,我的意思是注销。

我不知道这段代码发生了什么。

请问有人能看出来这是什么吗?

谢谢

标签: ruby-on-railsrubydevise

解决方案


你确定你没有任何disconnect方法或者在通道关闭时有什么清理 :current_user 吗?我认为问题是通道被关闭并且清理 current_user


推荐阅读