django - 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,我将无法生成令牌,因为我没有用户对象。
有人可以帮忙吗
谢谢
解决方案
推荐阅读
- javascript - DiscordAPIError:无法发送空消息:我的所有命令?
- c# - 如何使用进程 ID 获取 IIS 托管网站的 IP 地址和端口号?
- regex - 从查询字符串重定向到firebase中的干净路径
- c - 彩色文本 Windows 命令行
- tensorflow - 为什么我的 Keras 和 Sklearn 指标值相同?
- swift - VNRecognizeTextRequest 文本检测换行符
- php - 如何在 PHP 中将数据提取到 JSON 编码数组中?
- python - flask_login.login_user(user:object) - 查询数据库后的参数
- javascript - 避免响应机器人
- java - 如何将两个 Spinner 连接成一个相互依赖?在 if 条件下使用它的位置