Канал висит на ChatroomsChannel передает подтверждение подписки, получено (данные), не показывая console.log - PullRequest
0 голосов
/ 12 июня 2019
app/channels/application_cable/connection.rb:14
An unauthorized connection attempt was rejected
def connect
      self.current_user = find_verified_user
      logger.add_tags 'ActionCable'
    end

    protected

    def find_verified_user #line 12 No output from logger
      Rails.logger.debug env['warden'].user
      verified_user = User.find_by(id: cookies.signed['user.id'])
      if verified_user && cookies.signed['user.expires_at'] > Time.now
        verified_user
      else
        reject_unauthorized_connection
      end
    end

citing the two upvoted answers here:

Аутентификация соединений ActionCable

Вот файл, содержащий то, что следует получить от задания ретрансляции сообщений, которое успешно загружается на сервер.

App.chatrooms = App.cable.subscriptions.create "ChatroomsChannel",
  connected: ->
    # Called when the subscription is ready for use on the server

  disconnected: ->
    # Called when the subscription has been terminated by the server

  received: (data) ->
    console.log(data)
    active_chatroom = $("[data-behavior='messages'][data-chatroom-id='#{data.chatroom_id}']").append("<div><strong>#{data.username}:</strong> #{data.message}</div>")
    if active_chatroom.length > 0
      active_chatroom.append("<div><strong>#{data.username}:</strong> #{data.body}</div>")
    else
      $("[data-behavior='chatroom-link'][data-chatroom-id='#{data.chatroom_id}']").css("font-weight", "bold")
    # Called when there's incoming data on the websocket for this channel

  send_message: (chatroom_id, body) ->
    @perform "send_message", {chatroom_id: chatroom_id, body: body}

Когда сервер загружается с сообщением, он показывает правильное сообщение в задании ретрансляции сообщений.

Вот другой сценарий кофе для файла.

$(document).on 'turbolinks:load', ->
  $('#new_groupmessage').on 'keypress', (e) ->
    if e && e.keyCode == 13
      e.preventDefault()
      $(this).submit()
  $('#new_groupmessage').on "submit", (e) ->
    e.preventDefault()
    chatroom_id = $("[data-behavior='messages']").data("chatroom-id")
    body = $("#groupmessage_body")
    App.chatrooms.send_message(chatroom_id, body.val())
    body.val("")

Просто чтобы вы могли видеть HTML:


<div data-behavior='messages' data-chatroom-id='<%= @chatroom.id %>' class=messages style="margin-left: 140px; border-left: 1px black solid; padding-left: 2px;">
    <% @chatroom.groupmessages.order(created_at: :desc).limit(100).reverse.each do |groupmessage| %>
        <%= render groupmessage %>
    <% end %>
</div>

<%= form_for [@chatroom, Groupmessage.new] do |f| %>
    <%= f.text_area :body, rows: 1, class: "form-control", autofocus: true %>
    <%= f.submit %>
<% end %>

Довольно простые формы данных и их отображение.

class MessageRelayJob < ApplicationJob
  queue_as :default

  def perform(message)
    ActionCable.server.broadcast "chatrooms:#{message.chatroom.id}", {
      username: message.user.username,
      body: GroupmessagesController.render(message),
      chatroom_id: message.chatroom.id
    }
    # Do something later
  end
end

И задание ретрансляции сообщений тоже чисто и просто.

Журналы консоли:

Несанкционированная попытка подключения была отклонена

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...