我正在尝试向我的 session Controller 添加自定义 header :
class SessionsController < Devise::SessionsController
after_filter :allow_origin_header
def create
...
sign_in(resource_name.to_s, resource)
respond_with...
end
private
def allow_origin_header
...
response.headers['some_header'] = 'some_value'
...
end
end
当用户成功登录时,这会正常工作。但如果不是,则不会添加 header 。我猜这是因为“sign_in”;它会中断执行流程并从 Devise 返回自定义消息(电子邮件或密码无效)。
然后我创建了将我的 header 添加到响应中的中间件,但它对我也不起作用。看起来设计围绕所有中间件。
那么,如何为设备的响应添加自定义 header ?
最佳答案
class SessionsController < Devise::SessionsController
after_filter :allow_origin_header_filter, :only => :new
def create
...
sign_in(resource_name.to_s, resource)
respond_with
...
allow_origin_header
end
private
def allow_origin_header_filter
allow_origin_header if failed_login?
end
def allow_origin_header
...
response.headers['some_header'] = 'some_value'
...
end
def failed_login?
(options = env["warden.options"]) && options[:action] == "unauthenticated"
end
end
这个答案解释得更详细:Devise log after auth failure
关于ruby-on-rails - 如何在设计验证失败时指定自定义 http header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18791614/