0

我正在使用 Rails 4 开发 API,并且正在尝试对用户进行身份验证。每个用户都有一个唯一的 api_key,我希望他们通过 HTTP 标头或参数传递它来使用它。

我使用 Rails 提供的 authenticate_or_request_with_http_token 方法。

我尝试过这样的事情,但是当我通过参数传递 api_key 时它不起作用:

authenticate_or_request_with_http_token do |token, options|
   User.exists?(api_key: token) or User.exists?(api_key: params[:api_key])
end

任何想法 ?

4

1 回答 1

3

好的,我想出了我的问题的答案。根据http://api.rubyonrails.org/classes/ActionController/HttpAuthentication/Token.html上的文档 进行 HTTP Header 身份验证,如果根本找不到令牌,则返回 nil。所以对参数的测试根本不会被执行。

所以我测试了 HTTP 标头之前的参数,让 authenticate_or_request_with_http_token 处理 401 未经授权的响应。

unless  User.exists?(api_key: params[:api_key])
  authenticate_or_request_with_http_token do |token, options|
    User.exists?(api_key: token)
  end
end
于 2013-07-23T15:55:51.493 回答