我正在为一个网站开发一个类似于CMS(内容管理系统)的项目。我用django python开发这个系统。但我是django python的新手。
我有自己的用户模型(不是django用户模型),其中包含一些字段,如用户名,电子邮件,密码等。我从我自己的管理面板创建新用户。
如何将加密密码与登录页面上发布的用户密码进行比较。
例如,我第一次创建用户,123保存在db上的密码,如pbkdf2_sha24123 $ 000asd $ ...之后,我尝试使用密码123登录但是我收到密码不等于的错误。
from django.contrib.auth.hashers import make_password
from account.models import myUsers
password = make_password(request.POST.get('password'))
email = request.POST.get('email')
if myUsers.password == password and myUsers.email == email:
#make login and redirect to panel
else:
#show error message
我自己的模特喜欢;
class myUsers(models.Model):
username = models.CharField(max_length=25, verbose_name='username', unique=True)
email = models.CharField(max_length=225, verbose_name='email', unique=True)
password = models.CharField(max_length=225, verbose_name='password')
created_at = models.DateTimeField(auto_now_add=True, verbose_name='created date')
secret_question = models.CharField(max_length=225, verbose_name='secret question')
secret_answer = models.CharField(max_length=225, verbose_name='secret answer')
last_login = models.DateTimeField(verbose_name='last login')
secret_guid_key = models.CharField(max_length=15, verbose_name='recover key', unique=True, editable=False, default=uuid.uuid4().hex[:15])
user_role = models.CharField(max_length=6, verbose_name='member role')
用户对象有一个名为check_password()
的方法,它会根据存储在数据库中的哈希密码对您的纯文本密码进行哈希检查。
用法示例:
from account.models import myUsers
password = request.POST.get('password')
email = request.POST.get('email')
user = myUsers.objects.get(email=email)
if user.check_password(password):
# Success Code
else:
# Error Code
我认为你应该尝试django身份验证功能。
user = authenticate(username=username, password=password)
你不应该比较密码:
if myUsers.password == password ..:
而是密码的哈希:
if myUsers.password == myPasswordHashFunction(password) ..:
如何写myPasswordHashFunction
是你应该详细了解的,或者你最好使用django的authenticate
函数。
如果您不是安全专家,那么请(请!)不要发明自己的方式来验证和授权用户。