【问题标题】:Django: admin interface: how to change user passwordDjango:管理界面:如何更改用户密码
【发布时间】:2021-03-22 05:44:21
【问题描述】:

在 Django 中:

我创建了一个超级用户,可以查看所有用户

我还为我的用户实现了忘记密码,他们可以输入他们的电子邮件并将密码重置链接发送到他们的电子邮件,然后用户可以重置他的密码

但是管理员如何从管理仪表板更改某些用户的密码

【问题讨论】:

  • 在管理员中更改密码似乎不安全。你有什么特别的理由要这样做吗?
  • 如果您自定义了 UserChangeForm,答案就在这里*.com/questions/15456964/…

标签: python django django-admin


【解决方案1】:

Django 不在用户模型上存储原始(明文)密码,而仅存储哈希(有关完整详细信息,请参阅documentation of how passwords are managed)。因此,不要试图直接操纵用户的密码属性。这就是创建用户时使用辅助函数的原因。

要更改用户的密码,您有多种选择:

manage.py changepassword *username* 提供了一种从命令行更改用户密码的方法。它会提示您更改给定用户的密码,您必须输入两次。如果两者都匹配,则新密码将立即更改。如果您不提供用户,该命令将尝试更改用户名与当前系统用户匹配的密码。

您还可以使用set_password() 以编程方式更改密码:

from django.contrib.auth.models import User
u = User.objects.get(username='john')
u.set_password('new password')
u.save()

如果您安装了 Django 管理员,您还可以在 authentication system’s admin 页面上更改用户密码。 Django 还提供了视图和表单,可用于允许用户更改自己的密码。

更改用户的密码将注销他们的所有会话。 See Session invalidation on password change了解详情。

【讨论】:

    【解决方案2】:

    我们可以通过在admin.py 文件中添加UserAdmin 从 Django 管理界面重置其他用户密码。以 Django 3.1 为例。

    admin.py

    from django.contrib import admin
    from .models.models import User
    from django.contrib.auth.admin import UserAdmin
    
    admin.site.register(User, UserAdmin)
    

    然后我们就可以在 Django 管理界面的用户编辑页面看到下面的部分了。

    通过点击this form,我们可以进入重置密码表单。

    【讨论】:

      【解决方案3】:

      这个答案只是@kunal Sharma 答案的延伸

      从 Django 管理员更改用户密码

      进入用户

      然后点击这个表格,下面会出现一个表格,在那里修改密码

      【讨论】:

        【解决方案4】:

        在您的 admin.py 文件中,您可以将 UserAdmin 注册到您的 User 模型,如下所示:

        from django.contrib.auth.admin import UserAdmin as DjangoUserAdmin
        from django.contrib import admin
        from <my-app> import models    
        
        @admin.register(models.User)
        class UserAdmin(DjangoUserAdmin):
            
            # extra logic:
            ...
        

        【讨论】:

          最近更新 更多