【问题标题】:Django : find encrypted password in the database with filterDjango:使用过滤器在数据库中查找加密密码
【发布时间】:2020-10-23 05:12:25
【问题描述】:

当我注册一个新用户时,他的密码在数据库中使用 sha1 方法加密。 当我想搜索用户是否已经在我的登录页面的数据库中注册时,我必须检查电子邮件地址是否存在以及发送的密码是否正确。 这是我的代码: *views.py :"

#Login
@api_view(['POST', ])
def log_in(request):
    if request.method == 'POST':
        data = {}
        email = request.POST.get('email')
        password = request.POST.get('password')
        password = hashlib.sha1(password.encode('utf-8'))
        account = memberArea.objects.filter(email = email, password = password)
        if account.exists():
            for account in account:
                data['succes'] = "Successfully connected"
                data['id'] = account.id
                data['email'] = account.email
        else : 
            data['error'] = "email and password doesn't match !"
        return Response(data)

在这里,我尝试对用户发送的密码进行加密,然后在数据库中搜索此加密密码。 测试后不行。 提前感谢您对我的帮助。

【问题讨论】:

  • 请勿在数据库中存储加密密码!请阅读一些关于如何正确处理具有唯一盐和不可逆哈希的密码的文章。任何不足都会让您在数据泄露中不恰当地容易让您的用户密码被盗。

标签: python django api django-rest-framework django-views


【解决方案1】:

这里有 3 样东西要解压。

  1. 永远不要编写自己的密码散列方法。你可以确定它都在那里。一个小错误可能会让您付出惨重的代价。
  2. 您绝对不应该使用密码进行过滤。如果要检查密码是否匹配,那么
  3. 用于设置密码,User 型号有set_password,用于检查是否正确有check_password

您没有展示如何注册用户,但如果您的用户模型使用AbstractBaseUser,那么这可能就是您需要做的。

此外,还有这个 authenticate 函数可以根据您在设置中配置后端的方式完成所有工作。

你可以在那里找到 from django.contrib.auth import authenticate

【讨论】:

  • 谢谢。我想所以我必须重新制作我的注册 api
  • 如果您想要一个用于登录/注册的简单可配置 REST API,我可以推荐 github.com/sunscrapers/djoser。 (免责声明,我为开发此功能的公司工作)。教程可以在这里找到。 sunscrapers.com/blog/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-03
  • 1970-01-01
  • 2023-04-08
  • 2020-09-05
  • 2014-12-17
  • 2018-04-16
相关资源
最近更新 更多