我在Ruby on Rails上使用Devise。我有几个页面,我使用不同的mime类型 - 说/myapp/products.test ...所以我已经注册了一个名为'test'的mime类型,它类似于text / html ...而且我有内容协商以显示html.erb模板或test.erb模板......
现在 - 当我有authenticate_user时!在我的控制器中的方法 - 我正在使用'test'mime-type - 我没有正确地重定向 - 我根本没有被重定向 - 我只是得到一个“你需要登录或注册才能继续。 “消息。
在Devise中需要覆盖什么,以便在我使用除html之外的mime类型时重定向?
答案 0 :(得分:1)
我在以下维基页面上找到了部分答案: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
我还需要覆盖一个设计方法,因为我的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 中的方法,该方法会重定向到未经授权的网址 - 但我无法理解它out,也不确定设计(上游)是否不是覆盖方法的更好地方。