Django: 管理界面:如何更改用户密码

15

在Django中:

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

我还为我的用户实现了忘记密码功能,他们可以输入电子邮件地址,然后会向其发送密码重置链接,之后用户可以重置密码

但是管理员如何能够从管理面板更改某些用户的密码呢?


在管理员中更改密码似乎不安全。您想这样做的具体原因是什么? - ha-neul
如果您自定义了UserChangeForm,答案在这里: https://dev59.com/7mUp5IYBdhLWcg3wLVOn - UMR
5个回答

18

Django不会在用户模型中存储原始(明文)密码,而只会存储哈希值(有关密码管理方式的完整详细信息,请参见文档)。因此,请勿尝试直接操作用户的密码属性。这就是为什么在创建用户时要使用帮助函数的原因。

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

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管理界面,您也可以在认证系统管理页面上更改用户密码。 Django还提供了视图和表单,可用于允许用户更改自己的密码。 更改用户密码将注销其所有会话。 详细信息请参见更改密码时会话失效

13
我们可以通过在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管理界面的用户编辑页面中看到下面的部分。

enter image description here

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

enter image description here


这是一个完美的解决方案。 - undefined

6
这篇答案是对 @kunal Sharma 答案的扩展。
要在 Django 后台更改用户密码,请进入该用户。

enter image description here

点击这个表单,下面会显示一个表单,可以在那里更改密码。

enter image description here


6
在您的 admin.py 文件中,您可以像这样向您的 User 模型注册一个 UserAdmin:UserAdmin
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:
    ...

-1

在CMD中运行这些命令,然后更改任何用户密码:

python manage.py shell
from django.contrib.auth.models import
u=User.objects.get(username="user.name")
u
u.set_password("mynewpasssword")
u.save

1
我认为应该是 u.save()。 - Solano Pillaca Jason Ennio
1
第二行应该是from django.contrib.auth.models import User - juanbits

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接