Actioncable连接用户列表
我在ActionCable中validation用户是这样的:
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.name end protected def find_verified_user if verified_user = User.find_by(id: cookies.signed[:user_id]) verified_user else reject_unauthorized_connection end end end end
是否有可能获得连接用户列表? 我用谷歌搜索,但发现只有这个stackoverflow问题: 第一 , 第二
Ya有点必须推出自己的用户跟踪。
重要的部分如下:
# connection module ApplicationCable class Connection < ActionCable::Connection::Base identified_by :uid def connect self.uid = get_connecting_uid logger.add_tags 'ActionCable', uid end protected # the connection URL to this actioncable/channel must be # domain.tld?uid=the_uid def get_connecting_uid # this is just how I get the user id, you can keep using cookies, # but because this key gets used for redis, I'd # identify_by the user_id instead of the current_user object request.params[:uid] end end end # Your Channel def subscribed stop_all_streams stream_from broadcasting_name ConnectedList.add(uid) end def unsubscribed ConnectedList.remove(uid) end
然后在模型中:
class ConnectedList REDIS_KEY = 'connected_nodes' def self.redis @redis ||= ::Redis.new(url: ActionCableConfig[:url]) end # I think this is the method you want. def self.all redis.smembers(REDIS_KEY) end def self.clear_all redis.del(REDIS_KEY) end def self.add(uid) redis.sadd(REDIS_KEY, uid) end def self.include?(uid) redis.sismember(REDIS_KEY, uid) end def self.remove(uid) redis.srem(REDIS_KEY, uid) end end
来自: https : //github.com/NullVoxPopuli/mesh-relay/