我在基本控制器中有一个API,我的所有api控制器都扩展了我有以下代码片段:
def restrict_api_access
authenticate_or_request_with_http_token do |token, options|
@api_key = ApiKey.find_by(api_key: token)
cookies.signed.permanent[:writer_auth] = @api_key.api_key
end unless current_user
end
def current_user
api_key = ApiKey.find_by(api_key: cookies.signed[:writer_auth])
if api_key
@current_user ||= User.find_by(id: api_key.xaaron_users_id)
end
end
非常直接和基本,如果我这样做:
curl http://site.local.com:4000/api/v1/users -H 'Authorization: Token "0169d577d2845f3ea5e0fbf8ca2f444c"'
我收到了一份用户列表。活泉。
现在我在思考,根据我上面的逻辑,我现在应该根据api密钥为这个用户创建一个cookie,现在我应该能够做到:
curl http://site.local.com:4000/api/v1/users
但事实并非如此,而在第一轮通过cookie创建时,生命是盛大的,current_user
存在一个用户对象,在第二轮通过没有api密钥 - cookie是零,我被发送401未经授权。
不应该发生这种情况,不应删除cookie。我做错了什么?
答案 0 :(得分:1)
默认情况下,Curl不会保留Cookie。
这样做的方法是将cookie存储在cookie文件中,然后在每次请求时使用它。
请参阅http://ask.metafilter.com/18923/How-do-you-handle-authentication-via-cookie-with-CURL