在我的網站中,我想讓管理員重置任何用戶的密碼。如何從管理界面重置用戶密碼
隨着重置我的意思正是password_reset
視圖不(下contrib.auth):發送確認鏈接到該用戶的電子郵件。
這樣做的最好方法是什麼?是否有一個已經應用/片段,這樣做?
編輯:
讓我們假設用戶約翰是管理員。我想要的是讓約翰通過管理界面重置任何用戶的密碼。例如,要重置密碼,他只會轉到用戶,然後單擊任何鏈接重置其密碼。
在我的網站中,我想讓管理員重置任何用戶的密碼。如何從管理界面重置用戶密碼
隨着重置我的意思正是password_reset
視圖不(下contrib.auth):發送確認鏈接到該用戶的電子郵件。
這樣做的最好方法是什麼?是否有一個已經應用/片段,這樣做?
編輯:
讓我們假設用戶約翰是管理員。我想要的是讓約翰通過管理界面重置任何用戶的密碼。例如,要重置密碼,他只會轉到用戶,然後單擊任何鏈接重置其密碼。
我最後做的是添加自定義ModelAdmin
:
from django.contrib.auth.forms import PasswordResetForm
from django.contrib.auth.admin import UserAdmin
class CustomUserAdmin(UserAdmin):
...
def reset_password(self, request, user_id):
if not self.has_change_permission(request):
raise PermissionDenied
user = get_object_or_404(self.model, pk=user_id)
form = PasswordResetForm(data={'email': user.email})
form.is_valid()
form.save(email_template_name='my_template.html')
return HttpResponseRedirect('..')
def get_urls(self):
urls = super(UserAdmin, self).get_urls()
my_urls = patterns('',
(r'^(\d+)/reset-password/$',
self.admin_site.admin_view(self.reset_password)
),
)
return my_urls + urls
,我也不得不重寫change_form.html
模板,像這樣:
{% extends "admin/change_form.html" %}
{% load i18n %}
{% block object-tools %}
{% if change %}{% if not is_popup %}
<ul class="object-tools">
{# You can also give a name to that pattern and refer to it below using 'url' #}
<li><a href="reset-password/" class="historylink">Reset password</a></li>
<li><a href="history/" class="historylink">{% trans "History" %}</a></li>
{% if has_absolute_url %}
<li><a href="../../../r/{{ content_type_id }}/{{ object_id }}/" class="viewsitelink">
{% trans "View on site" %}</a>
</li>
{% endif%}
</ul>
{% endif %}{% endif %}
{% endblock %}
結果看起來是這樣的:
如果你想更詳細的解釋,我blogged about it。
是的,這是一個應用程序。查看此處:
也許我沒有解釋我自己。我想要的是讓管理員重置其他**用戶的密碼,而不是在他們忘記密碼時重置自己的密碼。 – 2012-04-24 21:03:26
好的。重置是什麼意思?你只是想通過管理員或其他方式更改密碼?您如何讓用戶知道他的密碼已重置,您希望他如何設置新密碼? – alexarsh 2012-04-25 08:44:13
他不想更改密碼(他可以這樣做) - 他想調用密碼重置,就好像他是該用戶一樣。含。觸發電子郵件等。 – 2012-04-25 09:19:26
的passreset應用程序只是通過urls.py暴露Django的看法,並調整登錄模板,以顯示「忘記密碼」鏈接。
內置的django密碼重置視圖和模板是爲了自我重置。我猜想重置表單可能會預先填入不同用戶的電子郵件地址(在查詢字符串中),但仍需要進行調整,例如更改電子郵件模板 - 「您收到此電子郵件是因爲您請求了密碼重置您的用戶帳戶」可能不是你想要什麼:
因此,如果您要包括自我復位,以及你應該暴露在不同的URL的意見。 鉤Django的意見納入urls.py像這樣:
urlpatterns += patterns('django.contrib.auth.views',
url(r'^accounts/password/reset/$',
'password_reset',
name='password-reset'),
url(r'^accounts/password/reset/done/$',
'password_reset_done',
name='password-reset-done'),
url(r'^accounts/password/reset/confirm/(?P<uidb36>[-\w]+)/(?P<token>[-\w]+)/$',
'password_reset_confirm',
name='password-reset-confirm'),
url(r'^accounts/password/reset/complete/$',
'views.password_reset_complete',
name='password-reset-complete')
)
,並要做出調整,例如在傳遞您自己的電子郵件模板:
url(r'^/accounts/password/reset/$',
'password_reset',
{'email_template_name': 'my_templates/password_reset_email.html'}
name='password-reset'),
的「password_reset」視圖有多個參數,你可以調整: https://docs.djangoproject.com/en/dev/topics/auth/#module-django.contrib.auth.views (「post_reset_redirect」想到的另外一個適合您的需要)
要顯示相應的鏈路您可以更改用戶管理員(注意,已經註冊 - 取消註冊,然後註冊您自己的子類別和附加鏈接字段)或change_form模板本身。
我不知道提供這個開箱即用的應用程序,所以我提出了問題:-)。
+1,這是很好的你把反饋。但是請將它的摘要放在答案的正文中,否則該帖子不會受到您的博客文章的保護,並且感覺就像流量嫖娼。 – 2012-05-15 08:07:10