У меня есть базовая настройка с rails + devise + actioncable.
Я в основном хочу отправлять уведомления напрямую и конфиденциально вошедшему в систему пользователю.Мой код выглядит следующим образом:
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
if verified_user = env['warden'].user
verified_user
else
reject_unauthorized_connection
end
end
end
end
notifications_channel.rb
class NotificationsChannel < ApplicationCable::Channel
def subscribed
stream_from current_user
end
end
И все это прекрасно работает.Клиент подключен, и я могу видеть в журналах, что он правильно вошел в систему. Кроме того, я вижу следующий ввод в консоли rails:
[ActionCable] [admin@example.com] Registered connection (Z2lkOi8vcHJpc21vL1VzZXIvMQ)
[ActionCable] [admin@example.com] NotificationsChannel is transmitting the subscription confirmation
[ActionCable] [admin@example.com] NotificationsChannel is streaming from #<User:0x00007f87f4180b68>
Однако, при попытке отправить уведомление этому пользователю, используякод ниже, кажется, что событие не доходит до пользователя (без ошибок!):
2.5.1 :010 > NotificationsChannel.broadcast_to(User.first, test: 'foo')
[ActionCable] Broadcasting to notifications:Z2lkOi8vcHJpc21vL1VzZXIvMQ: {:test=>"pass"}
=> nil
И мой потребитель javascript ничего не записывает:
let cable = ActionCable.createConsumer(`ws://mydomain.com/cable`)
let actions = {
received(payload) {
console.log(payload) // <== this line logs nothing!
}
}
cable.subscriptions.create('NotificationsChannel', actions)
Я сделал что-то не так?здесь?