含めるActionController::HttpAuthentication::Token::ControllerMethods
ことで、いくつかのメソッドを含めることができますが、request_http_token_authentication
それらは単に .xml のラッパーToken.authentication_request
です。その#authentication_request
-method が犯人であり、次のように(質問が示唆するように HTML ではなく)プレーン テキストを送信します。
def authentication_request(controller, realm)
controller.headers["WWW-Authenticate"] = %(Token realm="#{realm.gsub(/"/, "")}")
controller.__send__ :render, :text => "HTTP Token: Access denied.\n", :status => :unauthorized
end
トリックは、呼び出すのではなく、正しいステータスとヘッダーを設定し、代わりに JSON をレンダリングするようにオーバーライドrequest_http_token_authentication
するApplicationController
ことです。これをあなたに追加してください:Token.authentication_request
ApplicationController
protected
def request_http_token_authentication(realm = "Application")
self.headers["WWW-Authenticate"] = %(Token realm="#{realm.gsub(/"/, "")}")
render :json => {:error => "HTTP Token: Access denied."}, :status => :unauthorized
end