Как я могу заставить Devise работать, используя другой тип mime / content-type? - PullRequest
2 голосов
/ 28 октября 2011

Я использую Devise с Ruby on Rails. У меня есть несколько страниц, которые я использую с другим MIME-типом - скажем, /myapp/products.test ... поэтому я зарегистрировал MIME-тип под названием «тест», и он напоминает текст / HTML ... и я имею согласование содержимого для отображения шаблона html.erb или шаблона test.erb ...

Теперь - когда у меня есть authenticate_user! Метод в моем контроллере - и я использую «тестовый» MIME-тип - я не перенаправлен должным образом - я вообще не перенаправлен - я просто получаю «Вам необходимо войти в систему или зарегистрироваться, прежде чем продолжить. " сообщение.

Что в Devise нужно переопределить, чтобы оно перенаправлялось, когда я использую MIME-тип, отличный от HTML?

1 Ответ

1 голос
/ 04 ноября 2011

Я нашел часть ответа на следующей вики-странице: https://github.com/plataformatec/devise/wiki/How-To:-Make-Devise-work-with-other-formats-like-mobile,-iphone-and-ipad-(Rails-specific)

Итак - в итоге (помимо регистрации типа MIME и т. Д., Как описано в вопросе):

В файле config / initializers / devise.rb раскомментируйте строку config.navigational_formats и замените на:

config.navigational_formats = [:"*/*", "*/*", :html, :test]

Добавьте файл в инициализаторы и добавьте в него следующее:

ActionController::Responder.class_eval do
  alias :to_test :to_html
end

Мне также нужно было переопределить метод devise, потому что мой тип mime на самом деле тоже отвечает на html - но я хочу посмотреть, отвечает ли он и на: test. Итак, снова в папке инициализаторов, добавьте файл, который содержит следующее:

module Devise
  module Controllers
    # Helpers used in both FailureApp and Devise controllers.
    module SharedHelpers

      protected

      # Helper used by FailureApp and Devise controllers to retrieve proper formats.
      def request_format
        @request_format ||= if request.format.test?
          :test
        elsif request.format.respond_to?(:ref)
          request.format.ref
        elsif MIME_REFERENCES
          request.format
        elsif request.format # Rails < 3.0.4
          request.format.to_sym
        end
      end

    end
  end
end

Возможно, что было бы чище - вместо переопределения вышеуказанного метода - переопределить метод в Warden , который выполняет перенаправление на неавторизованный URL - но я не мог понять это и также неясно, является ли Devise (upstream) лучшим местом для переопределения методов.

...