簡體   English   中英

在 Django 中創建用戶和發送密碼重置

[英]Creating Users & Sending Password Resets in Django

如果對此已經有實質性的答案,我深表歉意,我已經搜索了很長時間,但找不到任何有用的答案。

我有一個 Django 項目,它具有不同級別的帳戶訪問權限。 我有一組“經理”,我想讓他們管理用戶帳戶。

我希望經理能夠為用戶創建用戶帳戶對象。 但是,我不希望他們必須處理創建密碼並將其發送給用戶(出於顯而易見的原因)。 通過這種方式,管理人員可以冒充用戶代表他們完成工作,並且用戶可以維護密碼控制和數據所有權。

這個想法是經理創建帳戶,當創建帳戶時,用戶將收到一個密碼重置表單(與 django 的開箱即用身份驗證相同),這將允許他們設置密碼。

我的代碼看起來類似於下面(省略了非必要的東西)

from django.contrib.auth.models import User
from django.contrib.auth.forms import PasswordResetForm

@manager_required
def manager_add_users(request):
    add_user_form = manager_add_user_form(request.POST)
    new_user_name = add_user_form.cleaned_data['user_name']
    new_user_email = add_user_form.cleaned_data['user_email']

    new_user = User.objects.create_user(
        username = new_user_name, 
        email = new_user_email, 
        )
    new_user.save()

    set_password_form = PasswordResetForm({'email': new_user.email })
            if set_password_form.is_valid():
                print 'Reset Form Is Valid'
                set_password_form.save(
                    request= request,
                    use_https=True,
                    from_email="support@org.com",
                    email_template_name='registration/password_reset_email.html')

該帳戶創建正確,一切正常運行。 問題是,盡管表單有效(重置表單是有效的語句打印),但它實際上並未發送重置表單。 沒有形式錯誤。

但是,在測試中,當我使用系統中已存在的地址初始化表單時,如下所示:

set_password_form = PasswordResetForm({'email':'existing_address@example.com'})

密碼重置表單發送沒有錯誤。 所以它只適用於系統中現有的用戶電子郵件地址,但是盡管用戶已經創建並調用了 .save() 方法,它仍然沒有捕捉到它(用戶在創建時被標記為“活動”,所以他們應該可以找到)

我有點不知所措。 我可以想到一些方法來解決這個問題,但這似乎是最直接的方法,我真的不完全確定為什么它不起作用。

是的,我可以發送消息。 我正在使用 django 的后端郵件進行測試:

EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'

看了一下源碼,好像是因為密碼為空,Django 忽略了這個請求。

在保存用戶之前嘗試設置一個臨時密碼(例如使用django.utils.crypto.get_random_string() )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM