【问题标题】:Devise JSON API returning 406 instead of 401 because of redirect由于重定向,设计 JSON API 返回 406 而不是 401
【发布时间】:2013-02-12 17:46:17
【问题描述】:

我正在尝试设计以在尝试请求未经过适当身份验证的端点时返回 401 和错误消息。

目前情况如下:

在 2013-02-27 02:40:22 +0000 开始 GET "/api/v1/home/index.json" for 127.0.0.1 由 HomeController#index 处理为 JSON 0ms内完成401 Unauthorized

在 2013-02-27 02:40:22 +0000 开始 GET "/api/v1/sign_in.json" for 127.0.0.1 由 SessionsController#new 处理为 JSON Completed 406 Not Acceptable in 1ms (ActiveRecord: 0.0ms)

我怎样才能阻止设计让我跳到 sign_in,而是让它只返回一个 401/json 响应。

我认为这可能与我尝试过的 CustomFailureApp 有关,但我不确定在这种特定情况下是否调用了 CustomFailureApp。

【问题讨论】:

    标签: ruby-on-rails-3 api authentication devise warden


    【解决方案1】:

    您可以制作自定义故障应用程序。

    class JsonFailureApp < Devise::FailureApp
      def respond
        self.status = 401
        self.content_type = 'json'
        self.response_body = '{"error" : "Authentication error"}'
      end
    end
    

    将此添加到您的设计初始化程序中

    config.warden do |manager|
      manager.failure_app = JsonFailureApp
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-10
      • 1970-01-01
      • 2015-11-11
      • 2018-07-18
      • 2014-08-19
      • 2019-09-30
      • 2015-12-21
      • 2019-11-20
      相关资源
      最近更新 更多