【发布时间】:2019-08-06 10:14:58
【问题描述】:
我有一个用户注册,在单击与发送到其电子邮件地址的令牌的链接后,用户的帐户被激活。如果在 24 小时内未点击特定链接,我想使链接失效并从数据库中删除他们的数据。
我在一处看过,链接在 48 小时后过期,对吗?
这是我的问题 -
如何自动删除那些在 24 小时内没有点击激活链接的用户?
(到目前为止,我可以通过转到管理面板并检查电子邮件是否确认来做到这一点)
这是我的激活函数,
def activate(request, uidb64, token):
try:
uid = force_text(urlsafe_base64_decode(uidb64))
user = User.objects.get(pk=uid)
except (TypeError, ValueError, OverflowError, ObjectDoesNotExist):
user = None
if user is not None and account_activation_token.check_token(user, token):
user.is_active = True
user.email_confirmed = True
user.save()
login(request, user)
return redirect('home')
else:
return render(request, 'user/account_activation_invalid.html')
这是我创建令牌的tokens.py,
from django.contrib.auth.tokens import PasswordResetTokenGenerator
from django.utils import six
class AccountActivationTokenGenerator(PasswordResetTokenGenerator):
def _make_hash_value(self, user, timestamp):
return (
six.text_type(user.pk) +
six.text_type(timestamp) +
six.text_type(user.email_confirmed)
)
account_activation_token = AccountActivationTokenGenerator()
我应该改变什么来实现这一点?
【问题讨论】:
-
一种通用的方法是创建一个
crontab,它执行一个djangocommand以删除任何符合filter(timestamp < now - 1 day)标准的激活链接。
标签: python django django-views