phpmyadmin 如何使用Django散列先前保存在MySQL中的密码

4ktjp1zp  于 2023-03-18  发布在  PHP
关注(0)|答案(1)|浏览(119)

我正在建立一个Django应用程序,并与现有的数据库与它自己的数据。
我建立了登录功能,并从管理员端创建用户帐户。
我的问题是如何哈希以前保存在数据库中的密码,而不是重新创建帐户。保存的密码是纯文本的,没有散列。我需要获取密码并应用make_password函数来散列它们,但我不知道从哪里开始。我是Django的新手
我的views.py:创建帐户:

@admin_login_required
def add_emp(request):
    if request.method == 'POST':
        user_name = request.POST['user_name']
        user_email = request.POST['user_email']
        user_otj = request.POST['user_otj']
        user_password = pwo.generate()
        user_password1 = make_password(user_password)
        empObj = User.objects.create(user_name=user_name, user_email=user_email, user_password=user_password1, user_otj=user_otj)
        if empObj:
            subject = 'Advanced Analytics Portal - Login Info'
            message = f'Name : {user_name}, \n Email : {user_email}, \n Password : {user_password} \n FROM - AA Portal'
            email_from = settings.EMAIL_HOST_USER
            send_mail(subject, message, email_from, [user_email])
            messages.success(request, "Employee was added successfully!")
            return HttpResponseRedirect('/create-emp')
        else:
            messages.error(request, "Some error was occurred!")
            return HttpResponseRedirect('/create-emp')
    return render(request, 'AddEmp.html')

登录查看器:

def user_login(request):
    if request.method == "POST":
        user_email = request.POST['user_email']
        user_password = request.POST['user_password']
        user_details = User.objects.filter(user_email=user_email).first()

        if user_details and check_password(user_password, user_details.user_password):
            request.session['logged_in'] = True
            request.session['user_email'] = user_details.user_email
            request.session['u_id'] = user_details.user_email
            request.session['user_name'] = user_details.user_name
            request.session['u_type'] = "emp"
            return HttpResponseRedirect('/user_index')
        else:
            return render(request, 'EmpLogin.html', {'msg': "0"})
    else:
        return render(request, 'EmpLogin.html')
sauutmhj

sauutmhj1#

简短答案:

通过python manage.py shell命令熟悉django shell,在那里你可以导入你的用户模型,修改值和其他东西,也可以从django导入用户模型,使用这个方法:.set_password()

from django.contrib.auth import User
from .models import MyUser
my_user = MyUser.objects.all().first() # grab just one user for demonstration purposes
print(User.set_password(my_user.plain_pw_field)) # prints hashed pw to console

路线图:

我理解你的问题。“我以前以纯文本存储密码。我意识到这不是最先进的。如何将其更改为正确的python-django方式?”
跟我来这里:
首先你想从AbstractUser继承你的用户模型,因为你会得到这里列出的所有令人惊奇的功能。然后你删除你的“plain-password-field”,因为将来你想使用AbstractUser的密码域,它只得到散列存储。
当您执行迁移时,它会问“嘿,现在没有密码的旧用户该怎么办”。您想手动设置它们,然后执行上面的简短回答。
当然,您需要在for循环中对所有MyUser对象迭代一次。
阅读大量关于djangos User的文章,因为它会对你有很大帮助。
告诉我进展如何。

相关问题