【问题标题】:Storing passwords in MySQL database in hashed form Django App以散列形式将密码存储在 MySQL 数据库中 Django App
【发布时间】:2023-03-10 23:56:01
【问题描述】:

我正在开发一个 Django 应用程序,我的 django 正在使用 MySQL 数据库,可以通过 django 管理页面(内置)进行处理。

目前,我正在创建可以通过在 Django 管理中手动创建用户名和密码来访问应用程序的用户 --> 身份验证和授权 --> 用户 --> 添加。 (这就是我想要的,因此我的要求在这里得到满足。)

当我通过 django admin 创建用户并添加密码时,它会被散列,没有人可以看到纯文本密码。

另外,我的 django 应用程序包含登录,用户可以通过该登录进行身份验证,它还包含记录谁登录的模型(登录)。但是这里的问题是,当用户登录时,登录模型将密码以纯文本形式存储在 Db(MySQL)中,并且我希望登录模型应该以散列形式存储密码。

注意:- 我已在 settings.py 中包含 所有哈希器

这是代码

模型.py

from django.db import models
from datetime import datetime
from django.contrib.auth.models import User

# Create your models here.


class LoginEvent(models.Model):

    user = models.ForeignKey(User, on_delete=models.CASCADE)
    date_and_time = models.DateField(auto_now_add=True)

    def __str__(self):
        return str(self.user) + ': ' + str(self.date)



class Login(models.Model):              #model that stores username and Password in MySQL database in plain text.

    username = models.CharField(max_length=50) 

    password = models.CharField(max_length=32, default="", null=False)  



    def __str__(self):                               
        return self.username                    

Views.py

from .models import Login
from datetime import datetime

# Create your views here.

def login_view(request):
    context = {}
    if request.method == "POST":
        username = request.POST.get('username')
        password = request.POST.get('password')
        authform_data = authForm (request.POST or None)

        user = authenticate(request, username=username, password=password)
        if user:
            login(request, user)
            authform_data.save()
            return HttpResponseRedirect(reverse('IP form'))
        else:
            messages.error(request,'Please provide valid credentials')
            return render (request,"first_app/login.html", context)

    else:
        return render (request,"first_app/login.html", context)

Settings.py

PASSWORD_HASHERS = [
    'django.contrib.auth.hashers.PBKDF2PasswordHasher',
    'django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher',
    'django.contrib.auth.hashers.Argon2PasswordHasher',
    'django.contrib.auth.hashers.BCryptSHA256PasswordHasher',
    'django.contrib.auth.hashers.MD5PasswordHasher',    
]

谢谢帮助。 :-)

【问题讨论】:

  • 为什么你有一个单独的登录模型呢?你为什么不使用用户模型?
  • 因为我想制作自己的登录模型,而不是使用内置的用户模型。我只希望登录模型以散列形式存储密码,而不是纯文本。我怎样才能实现它?
  • 你不应该那样做。使用内置模型;您可以通过separate profile model 或making a custom User model 扩展它。
  • Django 的内置身份验证系统将其存储为哈希值。我建议使用内置的东西
  • @DanielRoseman 你能指定我可以通过哪种方式修改代码来做同样的事情吗?谢谢帮助。

标签: python mysql django django-models


【解决方案1】:

我想通了。!正如@Daniel Roseman 所说,使用 django 的内置用户模型,登录后用户密码不会被散列。谢谢大家的回复。 :-)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-28
    • 2014-09-25
    • 2011-01-20
    • 1970-01-01
    • 2020-03-16
    • 2011-03-30
    • 1970-01-01
    • 2011-08-23
    相关资源
    最近更新 更多