Django EmailLoginVerify函数邮箱登录认证失败问题排查
问题分析与解决
核心问题
你代码里的authenticate调用犯了关键错误——直接传入了数据库存储的哈希密码,但authenticate方法要求的是用户输入的明文密码。从打印日志能看到,target.password是pbkdf2_sha256$...格式的加密字符串,把它传给authenticate时,Django会将其当作明文再次哈希,结果必然和数据库里的哈希值不匹配,所以返回None。
修复方案
既然已经通过邮箱验证码完成了身份校验(确认邮箱对应用户合法、验证码正确),完全不需要调用authenticate,直接用获取到的用户对象执行登录即可:
修改代码中authenticate及后续判断部分:
# 删除原有的authenticate相关代码 # user = authenticate(request, username=target.username, password=target.password) # print(user) # 直接登录已验证的用户 login(request, target) return HttpResponse('good')
补充说明
这个场景下用authenticate本身就不合理,因为邮箱验证码登录流程里用户没有输入密码,不存在明文密码可以传给authenticate做验证。跳过authenticate直接调用login是符合业务逻辑的——你已经通过其他方式完成了用户身份的合法性校验。
内容的提问来源于stack exchange,提问作者maziyar heydary
相关产品推荐
相关产品推荐

