ruby-on-rails - 如何在设计验证失败时指定自定义 http header ?

标签 ruby-on-rails ruby devise

我正在尝试向我的 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/

相关文章:

ruby-on-rails - Sublime Text ruby​​ .erb block 注释键盘快捷键?

ruby - 如何在 ruby​​ 中缓存 Haml 模板

设计 Omniauth 未定义方法 omniauth_authorize_path

javascript - 在javascript中访问rails路由

css - Rails循环安排

ruby-on-rails - 如何使本地主机 :3000 available world-wide with my IP adress?

ruby - 将 pp 的结果(或输出到控制台的任何内容)放入字符串中

ruby-on-rails - OmniAuth Facebook 作为弹出窗口

ruby-on-rails - 添加用户 :name to devise invitable edit. html.erb 表单

使用不正确的凭据登录时,Jquery Mobile Rails & Devise 加载页面时出错