gpt4 book ai didi

Django:使用后如何删除 token ?

转载 作者:行者123 更新时间:2023-12-04 16:04:50 25 4
gpt4 key购买 nike

在 Django 中,我正在生成用于激活帐户的 token 。这是实际的代码:

'uid': urlsafe_base64_encode(force_bytes(user.pk)),
'token': default_token_generator.make_token(user),

例如:

http://localhost:8000/reset/MjQ/4uf-785b6e83f11ac22b6943/

在上面的url中,MjQuid4uf-785b6e83f11ac22b6943token

账户激活码是这样的:

def activate_account(request, uidb64, token):
try:
uid = force_text(urlsafe_base64_decode(uidb64))
user = get_user_model().objects.get(pk=uid)
except (TypeError, ValueError, OverflowError, User.DoesNotExist):
user = None
if (user is not None and default_token_generator.check_token(user, token)):
user.is_active = True
user.save()

messages.add_message(request, messages.INFO, 'Account activated. Please login.')
return redirect('login')

问题是一旦使用它仍然有效。但是,Django 密码重置机制(password_reset_confirm() View )在使用后以某种方式使 token 失效。我怎样才能做同样的事情?

最佳答案

token 未存储。它是基于以下内容的哈希值:

  • 用户密码

  • 用户上次登录日期

这样当Django的password reset confirm实际更改密码时,token hash会自动失效。

如果您想手动使散列失效,您可以通过以下任一方式实现:

为该用户生成并存储一个随 secret 码(这可能不是 如果您保留用户以前的密码,您想要什么):

password = User.objects.make_random_password()
user.set_password(password)

或者将用户的上次登录日期重置为当前时间戳

from django.utils import timezone
user.last_login = timezone.now()

关于Django:使用后如何删除 token ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49233271/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com