2015-02-09 94 views
1

我有一個基於excel文件創建多個用戶的腳本,以及向用戶發送歡迎電子郵件的信號。我希望這封歡迎郵件也包含純文本密碼。我知道這不是一個好習慣,我應該向用戶發送一個鏈接來設置他們的密碼,但現在不幸的是時間不在我身邊。在Django的歡迎電子郵件中發送密碼

有沒有在post_save信號中有明文密碼的方法?

+1

您不應該以純文本訪問用戶的密碼。 – jonrsharpe 2015-02-09 11:12:15

+0

您是如何生成您期望通過電子郵件發送的密碼的? – 2015-02-09 11:13:27

+0

@BurhanKhalid通過'User.objects.make_random_password()' – 2015-02-09 11:15:18

回答

1

停下來想了一會,想出了可能是最好的解決方案。我讓腳本生成沒有任何密碼的用戶,但使用user.active = False,並且在信號中,我生成密碼,設置user.active = True併發送帶有密碼的電子郵件。這樣,如果由於某種原因信號不能被調用,就不會有任何安全問題,用戶將無法登錄。

將切換到更好的方法(向用戶發送一個當我有時間時重置密碼鏈接)。

+0

這種方式存在問題,非活動用戶無法登錄,「默認AUTHENTICATION_BACKENDS拒絕非活動用戶。」 https://docs.djangoproject.com/en/1.11/topics/auth/default/#limiting-access-to-logged-in-users – diek 2017-09-13 05:00:14

+1

@diek true,但是在我的用例中,所有用戶都被設置爲在生成密碼併發送電子郵件時處於活動狀態,因此沒有未激活的用戶。 – 2017-09-13 12:58:00

+0

是@Eduard,您當然可以在設置密碼的同時設置爲激活狀態。我度過了漫長的一天,我非常喜歡這種方法。我打算使用它,謝謝 – diek 2017-09-13 15:05:43

6

保存純文本密碼或使用post_save信號在這裏,不會那麼明智。雖然創建用戶使用以下方法:

new_password = User.objects.make_random_password() 
user = User.objects.create_user(username=data.name, email=data.email, password=new_password) 
user.send_welcome_mail(new_password) // custom instance method to send a mail and the send password as parameter 

這應該可以做到。

+0

你應該注意這也不是很安全。最好在首次登錄時爲用戶生成一次性使用鏈接 – Alvaro 2015-02-09 13:19:56

+0

當然,但如上所述,這不是開發人員的選擇。 :) – 2015-02-14 10:38:54