Tastypie自动退出

时间:2013-06-13 16:24:34

标签: python django authorization tastypie api-key

我正在使用带有Tastypie的Django 1.4.3创建API。我使用ApiKey来验证用户身份。默认情况下,ApiKey无法过期。但是在apikey表中有一个带有日期时间的列created。即使我将其更改为2010年,密钥仍然有效。

我的问题是如何让列created变得有用并且禁止访问比24小时更早的密钥,这是最简单的方式并且有意义吗?

目前我不知道我怎么能尝试实现这一目标。

我不希望现成的解决方案。一些有用的提示。

1 个答案:

答案 0 :(得分:2)

我通过覆盖ApiKeyAuthentication中的方法get_key找到了解决方案。

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