gpt4 book ai didi

django - default_token_generator 如何存储 token ?

转载 作者:行者123 更新时间:2023-12-04 22:56:05 28 4
gpt4 key购买 nike

我最近使用教程构建了一个基于 Django 的身份验证系统。在这个系统中,我在 forms.py 中创建了一个 token 。此 token 然后在激活激活邮件中发送(作为链接)。

from django.contrib.auth.tokens import default_token_generator    
token = default_token_generator.make_token(user)

接收 get 请求的 View 与此链接中提供的 token 和用户 ID 相匹配,并使用以下方法检查 token :
default_token_generator.check_token(user, token)

这将验证 token 是否已通过我的网站发送。但我不明白这个过程。 token 是独一无二的,但我似乎没有将 token 保存在某处?那么如何 check_token()验证 token ?

最佳答案

token 由时间戳和 HMAC 值组成。 HMAC 是一个 key 散列函数:散列使用一个 secret key (默认情况下 settings.SECRET_KEY )来获得一个唯一的值,但是无论有没有 key ,“解散”都是不可能的。

散列组合了四个值:

  • 用户的主键。
  • 用户的散列密码。
  • 用户的上次登录时间戳。
  • 当前时间戳。

  • 然后 token 由当前时间戳和这四个值的散列组成。前三个值已经在数据库中,第四个值是 token 的一部分,因此Django可以随时验证 token 。

    通过在散列中包含用户的散列密码和上次登录时间戳,当用户登录或更改密码时, token 会自动失效。还会检查当前时间戳以查看 token 是否已过期。请注意,即使当前时间戳包含在 token 中(作为 base36 编码字符串),如果攻击者更改该值,哈希值也会更改并且 token 被拒绝。

    关于django - default_token_generator 如何存储 token ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46234627/

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