用户登录,密码验证失败
来源:3-7 xadmin后台管理系统的配置
gcoupleJ
2017-09-02
我创建了一个超级用户admin,密码是admin123,无论xadmin登录,还是api 登录都失败。
都是 user.check_password(password) 的时候失败,我跟进了check_password函数
python36/lib/python3.6/site-packages/django/contrib/auth/hashers.py



encoded 和 我数据库实际存储的password hash后的值是一致的。
但hashers.py 中
is_correct = hasher.verify(password, encoded)
is_correct 返回 False
环境是python3.6.2,django 1.11.3 ,mysql 数据库校对集 utf8_general_ci
补充于 20170902 15:25
我发现问题了,创建用户的时候,make_password 会被调用两次,也就是sha256的结果又被算了一次。
验证的时候,只调用了一次,具体原因还在查。
补充于 20170902 16:19
我发现createsuperuser 以及其他创建用户的时候,会被调用到
apps/users/signals.py 中的 create_user
@receiver(post_save, sender=User)
def create_user(sender, instance=None, created=False, **kwargs):
print('created:',created)
if created:
password = instance.password # 这里的password是hash后的“pbkdf2_sha256$36000$wYmje2PDm17l$ogZ9HI1BiofA0ceWUi3r/rcKyoVFAYBmnV8OtBjrSHI=”
instance.set_password(password)
instance.save()
5回答
-
gcoupleJ
提问者
2017-09-02
为了不影响继续学习,我修改了 apps/users/signals.py 中的 create_user
# -*- coding: utf-8 -*-
__author__ = 'bobby'
from django.db.models.signals import post_save
from django.dispatch import receiver
from rest_framework.authtoken.models import Token
from django.contrib.auth import get_user_model
User = get_user_model()
@receiver(post_save, sender=User)
def create_user(sender, instance=None, created=False, **kwargs):
if created:
password = instance.password
if "pbkdf2_sha256$36000" in password:
return
instance.set_password(password)
instance.save()10 -
王英岚
2018-03-22
看到楼主的解决方案了,自己也试过了,可以解决登录时出现的问题。但是这样做会不会有别的问题,加密过的密码前面开头的字符串是固定的吗?
00 -
名字被用了
2018-01-30
怪不得总返回None,
00 -
慕运维7243590
2017-09-19
我也遇到同样问题,不知如何解决
00 -
gcoupleJ
提问者
2017-09-02
数据库校对集 utf8_general_ci
012017-09-04
Python前后端分离开发Vue+Django REST framework实战
2906 学习 · 2491 问题
相似问题