首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用不同的mime-type/content-type让Devise工作?

如何使用不同的mime-type/content-type让Devise工作?
EN

Stack Overflow用户
提问于 2011-10-28 21:43:30
回答 1查看 868关注 0票数 2

我在Ruby on Rails中使用Devise。我有几个页面,我正在使用不同的mime类型-比如/myapp/products.test ...所以我注册了一个名为'test‘的mime类型,它类似于text/html ...并且我有内容协商,可以显示html.erb模板或test.erb模板...

现在--当我有一个authenticate_user的时候!方法-我使用的是'test‘mime-type -我没有被正确地重定向-我根本没有被重定向-我只是得到一个“你需要在继续之前登录或注册”。消息。

Devise需要重写什么,以便在我使用mime类型而不是html时进行重定向?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-11-05 01:32:29

我在下面的维基页面上找到了部分答案: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行,并替换为:

代码语言:javascript
复制
config.navigational_formats = [:"*/*", "*/*", :html, :test]

在initializers中添加一个文件,并添加以下内容:

代码语言:javascript
复制
ActionController::Responder.class_eval do
  alias :to_test :to_html
end

我还需要覆盖一个devise方法,因为我的mime类型实际上也响应html -但我确实想看看它是否也响应:test。因此,再次在initializers文件夹中,添加一个包含以下内容的文件:

代码语言:javascript
复制
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 (上游)是否不是重写方法的更好的地方。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7930077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档