我在Ruby on Rails中使用Devise。我有几个页面,我正在使用不同的mime类型-比如/myapp/products.test ...所以我注册了一个名为'test‘的mime类型,它类似于text/html ...并且我有内容协商,可以显示html.erb模板或test.erb模板...
现在--当我有一个authenticate_user的时候!方法-我使用的是'test‘mime-type -我没有被正确地重定向-我根本没有被重定向-我只是得到一个“你需要在继续之前登录或注册”。消息。
Devise需要重写什么,以便在我使用mime类型而不是html时进行重定向?
发布于 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行,并替换为:
config.navigational_formats = [:"*/*", "*/*", :html, :test]在initializers中添加一个文件,并添加以下内容:
ActionController::Responder.class_eval do
alias :to_test :to_html
end我还需要覆盖一个devise方法,因为我的mime类型实际上也响应html -但我确实想看看它是否也响应:test。因此,再次在initializers文件夹中,添加一个包含以下内容的文件:
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 (上游)是否不是重写方法的更好的地方。
https://stackoverflow.com/questions/7930077
复制相似问题