我正在使用Rails 4开发API,我正在尝试对用户进行身份验证。 每个用户都有一个唯一的api_key,我希望他们通过HTTP标头或params传递它。
我使用Rails提供的authenticate_or_request_with_http_token方法。
我试过这样的事情但是当我通过params传递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
有什么想法吗?
答案 0 :(得分:3)
好的我找到了问题的答案。 根据{{3}}上的文件 对于HTTP Header身份验证,如果根本找不到令牌,则返回nil。 所以对参数的测试根本不会执行。
所以我在HTTP标头之前测试params,让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