我正在使用 Tastypie 创建基于 Django 1.4.3 的 API。我使用 ApiKey 对用户进行身份验证。默认 ApiKey 不能过期。但是created
apikey 表中有日期时间列。即使我将其更改为2010
年份,密钥仍然有效。
我的问题是如何created
以最简单的方式使该列有用并禁止访问超过 24 小时的密钥,这是否有意义?
目前我不知道我什至如何尝试实现这一目标。
我不指望现成的解决方案。一些有用的提示。
我正在使用 Tastypie 创建基于 Django 1.4.3 的 API。我使用 ApiKey 对用户进行身份验证。默认 ApiKey 不能过期。但是created
apikey 表中有日期时间列。即使我将其更改为2010
年份,密钥仍然有效。
我的问题是如何created
以最简单的方式使该列有用并禁止访问超过 24 小时的密钥,这是否有意义?
目前我不知道我什至如何尝试实现这一目标。
我不指望现成的解决方案。一些有用的提示。
我通过覆盖get_key
ApiKeyAuthentication 中的方法找到了解决方案。
class MyApiKeyAuthentication(ApiKeyAuthentication):
def get_key(self, user, api_key):
"""
Attempts to find the API key for the user. Uses ``ApiKey`` by default
but can be overridden.
"""
from tastypie.models import ApiKey
try:
api_key = ApiKey.objects.get(user=user, key=api_key)
current_time = datetime.utcnow()
current_time = current_time.replace(tzinfo=pytz.utc)
week = timedelta(7)
if not (current_time - api_key.created) < week:
api_key.delete()
return self._unauthorized()
else:
api_key.created = current_time
api_key.save()
except ApiKey.DoesNotExist:
return self._unauthorized()
return True