ruby-on-rails – authenticate_or_request_with_http_token返回html而不是json

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – authenticate_or_request_with_http_token返回html而不是json前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我创建了一个rails-api应用程序,并继续使用令牌认证来保护它.

我设置了一个before_filter,它调用一个使用authenticate_or_request_with_http_token的方法.一切正常工作,但当验证不正确时,我得到一个html响应.

如何定义响应应该是什么格式?

before_filter :restrict_access

private

def restrict_access
  authenticate_or_request_with_http_token do |token,options|
    check_token token
  end
end

def check_token(token)
  Session.exists?(access_token: token)
end

解决方法

通过包括ActionController :: HttpAuthentication :: Token :: ControllerMethods,您可以包括几个方法,其中request_http_token_authentication是简单的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

诀窍是覆盖ApplicationController中的request_http_token_authentication,以不调用Token.authentication_request,但要设置正确的状态和标题,然后渲染JSON.将其添加到您的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

猜你在找的Ruby相关文章