如何从服务器终止对actioncable频道的订阅?
有没有办法从服务器端(控制器)终止对任何特定使用者的特定通道的订阅,以便可以调用我的咖啡脚本文件中的断开连接回调?
你可以做这样的事情。
class YourChannel < ApplicationCable::Channel #your code def your_custom_action if something reject_subscription end end end
http://api.rubyonrails.org/classes/ActionCable/Channel/Base.html#class-ActionCable::Channel::Base-label-Rejecting+subscription+requests
class ChatChannel < ApplicationCable::Channel def subscribed @room = Chat::Room[params[:room_number]] reject unless current_user.can_access?(@room) end end
在致电reject
之前,您还可以告知订户拒绝原因:
class ChatChannel < ApplicationCable::Channel def subscribed if params["answerer"] answerer = params["answerer"] answerer_user = User.find_by email: answerer if answerer_user stream_from "chat_#{answerer_user}_channel" else connection.transmit identifier: params, error: "The user #{answerer} not found." # http://api.rubyonrails.org/classes/ActionCable/Channel/Base.html#class-ActionCable::Channel::Base-label-Rejecting+subscription+requests reject end else connection.transmit identifier: params, error: "No params specified." # http://api.rubyonrails.org/classes/ActionCable/Channel/Base.html#class-ActionCable::Channel::Base-label-Rejecting+subscription+requests reject end end end