You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django 1.10密码重置生成的Token存储位置及查询问题

解决django-rest-auth密码重置Token找不到的问题

嘿,我之前在使用django-rest-auth实现密码重置功能时也碰到过一模一样的困惑!让我给你梳理清楚这里的关键点:

  • 密码重置的Token根本不存储在数据库里!
    Django自带的密码重置机制(django-rest-auth就是基于这个实现的)是通过签名生成Token的——它会把用户的ID、邮箱、最后登录时间等信息,结合你的项目SECRET_KEY进行加密签名,生成唯一的Token。验证的时候会重新生成签名和请求里的Token对比,所以完全不需要把Token存在数据库中,自然查不到记录。

  • 你查的两张表和密码重置Token无关:

    • authtoken_token:这是Django REST Framework的TokenAuthentication用的API认证Token,是用户登录后用来标识身份、访问受保护API的,和密码重置流程完全不搭边。
    • account_emailconfirmation:这是django-allauth的邮箱确认Token,用于验证用户邮箱所有权,和密码重置不是同一个功能。
  • 关于你提到的token_model:
    rest_auth/utils.py里的token_model指的是API认证用的Token模型(默认是rest_framework.authtoken.models.Token),和密码重置流程里的Token没有任何关系,别搞混啦。

  • 如果需要调试查看密码重置Token:
    你可以手动用Django的工具生成看看,比如在shell里运行这段代码:

    from django.contrib.auth.tokens import PasswordResetTokenGenerator
    from django.utils.http import urlsafe_base64_encode
    from django.utils.encoding import force_bytes
    from django.contrib.auth import get_user_model
    
    User = get_user_model()
    user = User.objects.get(email="test@example.com")
    token_generator = PasswordResetTokenGenerator()
    reset_token = token_generator.make_token(user)
    uid = urlsafe_base64_encode(force_bytes(user.pk))
    print(f"密码重置Token: {reset_token}")
    print(f"对应的UID: {uid}")
    

内容的提问来源于stack exchange,提问作者anyavacy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:25:42