【问题标题】:how to select user from auth_user django python for given username and hashed password如何从 auth_user django python 中为给定的用户名和散列密码选择用户
【发布时间】:2018-02-11 21:26:20
【问题描述】:

我正在创建一个 python api,如果在数据库中找到电子邮件和密码,但密码是散列的,它将从 mysql 数据库返回数据,这是我可以散列从 api 输入的密码以比较它的任何方式mysql密码。

我正在使用 django.contrib.auth 创建新用户,这些新用户在包含哈希密码的数据库中自动创建了表 auth_user。

我知道一种解决方案是将未加密的密码存储在另一个表中,但可以在不创建另一个密码字段的情况下完成吗?

我搜索了很多,我找不到任何解决方案。

【问题讨论】:

  • 也许你应该考虑使用 django-rest-framework。它可以开箱即用地为您处理所有身份验证(以及更多)。
  • @m_____z rest 框架由 django 本身扩展。 django已经提供了所有的认证工具,不需要rest框架
  • 我的意思是不需要手动比较密码(即使使用“身份验证工具”)——只需定义一个适当的身份验证方案,django-rest-framework 就可以为您完成所有工作:@ 987654321@
  • django 本身也是如此。 Django 也有同样的功能

标签: python mysql django api hash


【解决方案1】:

您可以使用authenticate。不需要自己散列密码,Django 已经这样做了。您只需传递用户名和密码即可进行身份验证功能,它将返回相应的用户对象。

def my_view(request):
    username = request.POST['username']
    password = request.POST['password']
    user = authenticate(request, username=username, password=password)

【讨论】:

  • 如果用户存在于系统中,我正在创建一个以电子邮件和密码为参数的 api 发布请求,我返回一些数据。用户必须指定他的用户名和密码,我正在创建这个 api 以允许我的所有用户只有在我的网站上有帐户时才能访问一些数据。
  • @gabyawad 如果您有用户名字段,最好使用它而不是电子邮件
【解决方案2】:

您也可以使用check_password。 django 中的每个用户都有这个方法。它会自动对其进行哈希处理并与之前保存的进行比较:

user.check_password(raw_password)

希望对你有帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-10
    • 2013-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-06
    • 1970-01-01
    相关资源
    最近更新 更多