我对Django的authenticate函数有问题

u1ehiz5o  于 2023-10-21  发布在  Go
关注(0)|答案(1)|浏览(118)

当我输入与数据库中相同的用户名和密码时,它显示“无效凭据”而不是“成功”。
def login(request):if request.method == 'POST':

username           = request.POST.get('user')
    password1          = request.POST.get('password1')
    a                  = authenticate( username=username, password=password1)
    if a is not None:
        return HttpResponse("Success")
    else:
        return HttpResponse("Invalid Credentials")
return render(request, 'login.html')
bxjv4tth

bxjv4tth1#

问题不在于身份验证本身,而在于创建用户。不能在数据库中创建具有原始密码的用户。Django将 hashed 密码存储在数据库中。默认情况下使用 * PBKDF 2 * 散列器,尽管您可以配置它。这意味着密码看起来像:

algorithm$iterations$salt$hash

验证模块将对您给予的密码进行散列,并检查是否匹配。
你可以使用**createsuperuser**管理命令[Django-doc]来创建一个超级用户:

django-admin createsuperuser

或者你可以使用**changepassword**管理命令[Django-doc]来更改用户的密码:

django-admin changepassword username

对于普通用户,你可以通过管理页面,或者在shell中使用**.create_user(…)**方法[Django-doc]:

$ python manage.py shell
Python 3.6.8 (default, Jan 14 2019, 11:02:34) 
[GCC 8.0.1 20180414 (experimental) [trunk revision 259383]] on linux
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from django.contrib.auth import get_user_model
>>> get_user_model().objects.create_user(username='username', password='thepassword')
<User: username>

相关问题