2015-02-09 114 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