首页 > 解决方案 > Django用户重置密码,MongoDB存储用户信息

问题描述

我正在使用 Django 来重置用户密码。但是我所有的用户信息都存储在 MongoDB 中,而不是提供的默认用户表中。

StackOverflow 和其他地方给出的所有示例都使用默认的用户身份验证机制,这对我没有帮助。

当用户需要重置密码时,我需要生成一个电子邮件链接。

表格.py

class EmailForPasswdChange(UserCreationForm):
    username = forms.CharField(max_length = 20, widget=forms.TextInput(attrs={'placeholder': 'Enter your username'}), required=True)
    password1 = forms.CharField(max_length = 20, widget=forms.TextInput(attrs={'placeholder': 'Enter your username'}), required=False)
    password2 = forms.CharField(max_length = 20, widget=forms.TextInput(attrs={'placeholder': 'Enter your username'}), required=False)
    class Meta:
        model = User
        fields = [
        'username',
        ]

视图.py

def sendEmail(request):
    if request.method == 'POST':
        form = EmailForPasswdChange(request.POST)
        if form.is_valid():
            instance = form.save(commit=False)
            instance.is_active =False 
            current_site = get_current_site(request)
            username = request.POST.get('username')
            print(username)
            subject = 'Your Request for Password Reset'
            message = "Your Password will be reset"
            message = render_to_string('email_activation_link.html', {
                 'username':username,
                 'domain':current_site.domain,
                 'uid': urlsafe_base64_encode(force_bytes(username)),
                 'token': token,
               })
            from_email = settings.EMAIL_HOST_USER
            recipient_list = (email,)
            print (recipient_list)
            send_mail(subject, message, from_email, recipient_list)
            return render (request, 'user/forgotpasswd.html', {'inform': "EMail sent for resetting Password"})
        else:
            print (form.errors)
    return render (request, 'user/forgotpasswd.html', {'inform': "EMail Not sent"})

由于我已经自定义了 UserCreationForm,在呈现的模板上,如果我输入要重置密码的用户名,因为它已经存在于 SQLite DB 中,所以会引发错误。

如果我将其更改为 forms.Form,我将无法生成令牌,因为我没有用户对象。

有人可以帮忙吗

谢谢

标签: djangomongodbreset-password

解决方案


推荐阅读