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 からカスタム メッセージを返します (メールまたはパスワードが無効です)。

次に、ヘッダーを応答に追加するミドルウェアを作成しましたが、うまくいきません。デバイスはすべてのミドルウェアを回っているように見えます。

では、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 に答える