为了账号安全,请及时绑定邮箱和手机立即绑定

Tastypie自动登出

Tastypie自动登出

一只甜甜圈 2021-03-30 07:16:13
我正在使用Tastypie创建基于Django 1.4.3的API。我使用ApiKey对用户进行身份验证。默认情况下,ApiKey不能过期。但是created在apikey表中有带有datetime的列。即使我将其更改为2010年份,密钥也仍然有效。我的问题是,如何created以最简单的方式使该列有用,并禁止访问比说的24小时更早的键,这样做有意义吗?目前,我还不知道该如何实现。我不希望有现成的解决方案。一些有用的提示。
查看完整描述

2 回答

?
茅侃侃

TA贡献1842条经验 获得超21个赞

我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


查看完整回答
反对 回复 2021-04-01
  • 2 回答
  • 0 关注
  • 131 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信