【问题标题】:How can I connect myself as an other user?我如何将自己连接为其他用户?
【发布时间】:2019-10-02 08:33:39
【问题描述】:

您好,我是 django 项目的开发人员,我必须检查我的开发人员是否正常。

为此,我必须以用户身份连接自己,但我只有他的电子邮件,而不是他的密码。我在table User 中找到了电子邮件和密码,但密码以此开头:pbkdf2_sha256 ...

所以我猜密码是加密的。有没有更容易做到这一点的方法?

感谢您的帮助!

【问题讨论】:

  • 取决于“以其他用户身份连接”的含义。通常,即使以管理员身份输入用户的帐户也不是一个想法,这就是为什么有良好的保护措施。但是可以编写让您模拟其他用户的代码(例如,编写一个使用 django.contrib.auth login() 方法切换当前登录用户的视图。)。也可以在 django shell 中只使用login()(如果您可以在生产环境中访问它)。但这并不容易,因为必须非常小心才能不引入安全漏洞。
  • 通常,如果您想在生产中测试某些东西,请创建您自己的非管理员用户帐户并尝试复制您的客户遇到的问题。

标签: python django python-3.x django-users pbkdf2


【解决方案1】:

根据创建新用户时密码的散列方式,您可以将用户的散列替换为另一个散列:

  1. 进入数据库并复制您要登录的用户的密码哈希
  2. 将此哈希存储在某处(您将需要它来恢复更改)
  3. 复制另一个用户(您知道密码的用户)的哈希
  4. 粘贴此用户的哈希值代替您要登录的用户的哈希值

如果哈希以相同方式生成,您将能够使用其他用户的密码登录。

完成后,还原数据库中的更改。

希望对你有帮助。

【讨论】:

    【解决方案2】:

    django 中的密码是一种加密方式,因此无法解密,因此无法从数据库中的用户表中找到任何用户的实际密码。
    如果您想以其他用户的名义登录而不必知道他们的密码,那么您可以编写一些复杂的代码来实现这一点,或者使用第三方包。
    django-hijack 看起来不错。它的docs 对如何使用它有很好的解释,所以我不打算在这里详述。如果您不喜欢这个包,您可以查看此用途的包列表here on djangopackages,然后选择您喜欢的包。

    django-hijack 用法:

    首先完成InstallationAfter Installation 步骤。

    • /hijack/<user_id> 发出帖子请求,其中<user_id> 是表user 的列id。如果您尚未更新模型用户上的字段 id,它将是 1、2、3,...。因此 url 将类似于/hijack/1/

    • 如果您想通过用户名进行劫持,请向/hijack/username/<username> 发出帖子请求。例如。 /hijack/username/awesome_username/

    • 如果您想通过用户的电子邮件进行劫持,请向/hijack/email/<user email>/ 提出发布请求。例如。 /hijack/email/awesome@email.com/

    以超级用户身份向其中一个 URL 发出发布请求后,您将被重定向到 settings.py 中指定的 HIJACK_LOGIN_REDIRECT_URL


    我不确定 django-hijack 是否适用于 python 3 或更新版本的 Django。如果它不起作用,请尝试django-impersonate,它以类似的方式提供相同的功能,并正式支持 python 3.6+ 和 django 1.11+

    【讨论】:

    • 我可以在我的网站上进入管理员,我可以用这个作为其他用户登录吗?
    • django-hijack 可以在 Python 3.8 和 Django 3 上运行。
    • 我不确定,你必须自己测试一下。
    猜你喜欢
    • 1970-01-01
    • 2018-02-22
    • 2018-04-01
    • 2022-07-30
    • 2012-07-14
    • 2020-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多