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

如何将API输入的密码与Django admin中存储的密码进行匹配?

问题核心原因

Django的用户密码在数据库中存储的是单向哈希后的结果,你直接把明文密码作为查询条件和库中哈希值做等值匹配,永远不可能得到正确结果,Django也不会在ORM查询时自动对password字段做加密转换。

解决方案

你不需要自己实现哈希加密逻辑,直接用Django原生提供的check_password方法完成明文密码和哈希值的校验即可,步骤如下:

  1. 仅通过邮箱查询到对应用户对象
  2. 调用用户对象的check_password方法,传入明文密码完成校验

正确代码示例

from django.contrib.auth import get_user_model
from django.core.exceptions import ObjectDoesNotExist

User = get_user_model()

try:
    email = self.serializer.validated_data['email']
    input_password = request.data['password']
    # 先仅通过邮箱查用户
    user = User.objects.get(email=email)
    # 校验密码是否匹配
    if not user.check_password(input_password):
        # 此处替换为你自己的密码错误处理逻辑
        raise PermissionError("账号或密码错误")
    # 校验通过,可直接使用user对象发送OTP
except ObjectDoesNotExist:
    # 此处替换为你自己的用户不存在处理逻辑
    raise PermissionError("账号或密码错误")

补充说明

check_password是Django AbstractBaseUser类自带的内置方法,会自动读取你项目settings中配置的密码哈希算法,对输入的明文密码做加密后和库中存储的哈希值对比,只要你的用户模型是继承自Django官方的基础用户类,都可以直接使用,无需额外适配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 16:00:00