как я могу истечь токены через 1 минуту? - PullRequest
3 голосов
/ 01 декабря 2019

Я пытаюсь истечь токены после его создания с максимальной продолжительностью 1 минута в соответствии с требованиями безопасности. моя функция выглядит следующим образом, но я не думаю, что все делает правильно, и я хотел бы знать, каков наилучший способ истечения токена через 1 минуту? Я использую технику диффузии два раза. следующая функция работает под models.py

def is_token_expired(self):
    if self.token == None:
        return False
    now = datetime.datetime.utcnow().replace(tzinfo=utc)
    timediff = now - self.created_at
    if timediff.seconds / 60 - 1 > 0:
        return True
    return False

Ответы [ 2 ]

2 голосов
/ 01 декабря 2019

Я думаю, что элегантный способ архивировать вашу цель - использовать кэш django .

Пример кода:

class Foo(models.Model):
   ...
   def save(self, *args, **kwargs):
       if not self.pk:
           # save the token when record created
           cache.set('token_key', '<Your token>', timeout=60)
       super(Foo, self).save(*args, **kwargs)

   @property
   def is_token_expired(self):
       # check if the token expired
       return cache.get('token_key') is None

   @property
   def token(self):
       # get token
       return cache.get('token_key')
0 голосов
/ 01 декабря 2019

Лучше использовать @property в вашей модели:

from datetime import timedelta

class Foo(models.Model):
    some_field = models.CharField()
    creation_date = models.DateTimeField(auto_now_add=True)

    @property
    def is_expired(self):
        if datetime.now > (self.creation_date + timedelta(minutes=1)):
            return True
        return False

, вы можете изменить timedelta(minutes=1) на сумму, действующую для вашего токена. и используйте его в своем коде так:

if your_instance.is_expired == True:
    # do something

Вы также можете использовать Встроенную систему кэширования Django (упомянутую в Enix) в качестве лучшего подхода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...