我有以纯文本形式存储的用户密码列表.我想我需要一个脚本来运行存储的密码并对它们进行哈希处理.我对Django还不熟悉,不知道从哪里开始,也不知道如何开始.

我创建了登录帐户,而创建帐户仅适用于新用户:

@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')

如何让以前的用户在不为其创建新帐户的情况下登录.

推荐答案

您可以使用make_password()来对密码进行哈希处理,使用is_password_usable()来通过判断密码是否经过哈希处理来避免重新对已经进行了哈希处理的密码进行哈希处理.

编写脚本或管理命令来循环现有的User个对象并更新它们的密码,如下所示:

from django.contrib.auth.hashers import make_password, is_password_usable
from myapp.models import User

def hash_existing_passwords():
    for user in User.objects.all():
        if not is_password_usable(user.password):
            continue
        user.password = make_password(user.password)
        user.save()


hash_existing_passwords()

您可以使用以下命令运行此脚本:

python manage.py shell < path/to/script.py

Python相关问答推荐

如何从具有多个嵌入选项卡的网页中Web抓取td类元素

TARete错误:类型对象任务没有属性模型'

使用FASTCGI在IIS上运行Django频道

在Python中处理大量CSV文件中的数据

运行Python脚本时,用作命令行参数的SON文本

图像 pyramid .难以创建所需的合成图像

如何使用它?

为什么以这种方式调用pd.ExcelWriter会创建无效的文件格式或扩展名?

如何在Python脚本中附加一个Google tab(已经打开)

将tdqm与cx.Oracle查询集成

在Python中动态计算范围

改进大型数据集的框架性能

在嵌套span下的span中擦除信息

下三角形掩码与seaborn clustermap bug

将标签移动到matplotlib饼图中楔形块的开始处

使用__json__的 pyramid 在客户端返回意外格式

当输入是字典时,`pandas. concat`如何工作?

利用SCIPY沿第一轴对数组进行内插

pytest、xdist和共享生成的文件依赖项

从列表中分离数据的最佳方式