我需要在Rails 3.1 API中结合最新版本的设备使用基于令牌的身份验证。到目前为止没问题。
现在我不想将我的:auth_token附加到客户端的POST / PUT参数,而是将此令牌作为请求标头发送,如HTTP_X_MYAPP_AUTH_TOKEN“。
我可以说服设计使用它而不是参数中的标记吗?是否可以实现这两者,以便我的API用户可以通过请求头或POST / PUT参数发送令牌?
的问候。菲利克斯
答案 0 :(得分:38)
我有同样的需求并提出了这个解决方案:
class YourController < ApplicationController
prepend_before_filter :get_api_key
before_filter :authenticate_user!
private
def get_api_key
if api_key = params[:api_key].blank? && request.headers["X-API-KEY"]
params[:api_key] = api_key
end
end
end
注意我的设计Devise.token_authentication_key
设置为api_key
。
config.token_authentication_key = :api_key
答案 1 :(得分:4)
我正在使用自定义“策略”:https://gist.github.com/4492569
答案 2 :(得分:4)
在Devise中可以通过查询字符串或HTTP基本身份验证的标头传递标准身份验证令牌,请参阅here。规范中用于传递HTTP_Authorization标头中的标记的Ruby代码是
header = "Basic #{Base64.encode64("#{VALID_AUTHENTICATION_TOKEN}:X")}"
get users_path(:format => :xml), {}, "HTTP_AUTHORIZATION" => header
使用curl从命令行进行测试将如下所示:
echo "HUGP59gXsd7773a75Dvc:X" | base64
=> SFVHUDU5Z1hzZDc3NzNhNzVEdmM6WAo=
curl --header "Authorization: Basic SFVHUDU5Z1hzZDc3NzNhNzVEdmM6WAo=" \
http://localhost/users.xml
答案 3 :(得分:1)
使用devise和devise-token_authenticatable,我必须在我的config / initializers / devise.rb中设置它,以便通过http头传递令牌:
config.http_authenticatable = true