2

我正在尝试向我的会话控制器添加自定义标头:

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

当用户成功登录时,这可以正常工作。但如果没有,则不会添加标题。我猜是因为“sign_in”;它会中断执行流程并从 Devise 返回自定义消息(电子邮件或密码无效)。

然后我创建了将我的标题添加到响应中的中间件,但它也不适用于我。看起来设计围绕所有中间件。

那么,如何为设计的响应添加自定义标头?

4

1 回答 1

0
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

于 2013-09-13T17:35:18.503 回答