Rails 4. Проблема со связкой websocket-rails и authlogic. Что делать?

Проблема в следующем:
Делаю чат. В чате сообщение может оставлять только авторизованный пользователь.
Контроллер, который обрабатывает websocket запросы наследуется от WebsocketRails::BaseController
class MessagesController < WebsocketRails::BaseController
  def create
    abort current_user
  end
end

Проблема в том, что метод current_user отсутствует, а знать от кого сообщение - надо.
Подключаю хелпер от ApplicationController, в котором определен этот метод (для аутентификации использую Authlogic)
Возникает другая ошибка - "You must activate the Authlogic::Session::Base.controller with a controller object before creating objects" - вываливает Authlogic.
Ок.
Пишу в контроллере MessagesController следующее:
class MessagesController < WebsocketRails::BaseController

  include ApplicationHelper

  before_action do
    Authlogic::Session::Base.controller = Authlogic::ControllerAdapters::RailsAdapter.new(self)
  end

  def create
    abort current_user
  end
end

Всё хорошо, но обнаруживается, что в контроллере Messages нет метода cookies (NoMethodError: undefined method `cookies'). И правильно, ведь он наследуется не от ActionController::Base а от WebsocketRails::BaseController.

Вопрос: кто нибудь использовал websocket-rails + authlogic? Если да, то скиньте ссылку на Github, где можно посмотреть код.
  • Вопрос задан
  • 482 просмотра
Решения вопроса 1
MAXOPKA
@MAXOPKA Автор вопроса
Ура! Нашел решение.
Оказывается объект унаследованный от WebsocketRails::BaseController, при отсутствии метода обращается к прокси объекту, который унаследован от ApplicationController. Но метод cookies в нем всё равно недоступен.
Получить куки внутри потомков WebsocketRails::BaseController можно через метод request.cookie, и с помощью них получить текущего пользователя.
Вот что получилось в итоге:
class MessagesController < WebsocketRails::BaseController
  include ApplicationHelper
  before_action do
    Authlogic::Session::Base.controller = Authlogic::ControllerAdapters::RailsAdapter.new(self)
  end
  def cookies
    request.cookies
  end
  def create
    abort current_user.id.to_s
  end
end
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы