Кабель действия в приложении rails с поддоменом - квартира не работает

Rails 5, apartment gem

трос действия connection.rb

module ApplicationCable
  class Connection < ActionCable::Connection::Base
    identified_by :current_user, :tenant

    def connect
      self.tenant = request.subdomain
      Apartment::Tenant.switch!(tenant)

      self.current_user = find_verified_user
      logger.add_tags 'ActionCable', current_user.try(:email) || 'Unauthenticated User'
    end

    protected

    def find_verified_user # this checks whether a user is authenticated with devise
      if verified_user = env['warden'].user
        verified_user
      else
        # May have public users accessing the channels
        # reject_unauthorized_connection
      end
    end
  end
end

среда/производство.рб

config.action_cable.allowed_request_origins = [ /https:\/\/(.*).mydomain.com/ ]

Пробовал приведенную выше ссылку на код, взятую из этих ссылок: Link 1 и Ссылка 2, но не работает.

В производстве: request.subdomain это nil (пробовал использовать горячее кодирование некоторых значений арендатора, но не работает)

В разработке: request.subdomain указывает имя арендатора, но фактический запрос не работает.

Любая помощь?


person ramamoorthy_villi    schedule 21.12.2020    source источник


Ответы (1)


Исправлена ​​эта проблема:

request.subdomain не работает и возвращает . В качестве альтернативы я передал значение арендатора через строку запроса

const getWebSocketURL = () => {
    var protocol = window.location.protocol === 'https:' ? 'wss://' : 'ws://';
    var host = window.location.host;
    var path = '/cable';
    var url = protocol + host + path;
    return `${url}?tenant=mytenant`;
};

и

const wsUrl = getWebSocketURL();
const cable = ActionCable.createConsumer(wsUrl);

соединение.rb:

self.tenant = request.params[:tenant]

Также внутри ваших каналов в каждом методе должна быть ваша первая строка

Apartment::Tenant.switch!(tenant)

здесь вы можете получить значения арендатора из комнаты

см. также эти ссылки: -to-set-tenant-in-actioncable
rails-actioncable-request-origins-subdomain

person ramamoorthy_villi    schedule 22.12.2020