使用 Django 避免临时电子邮件

Avoid temp emails using Django

我想阻止临时电子邮件并确保只有当电子邮件是真实的(例如 Gmail、Outlook、Yahoo)时用户才能注册。

forms.py

class SginupForm(UserCreationForm):
    class Meta:
        model = User
        fields =('username', 'first_name','last_name','email','password1','password2' )

views.py

@unauthenticated_user
def signup_form(request):
    if request.method == 'POST':
        form=SginupForm(request.POST)
        if form.is_valid():
            user=form.save()
            send_action_email(user,request)
            messages.add_message(request, messages.SUCCESS,
                                 'we have sent ur activation link')
            return redirect('core:login')
   
    else:
        form=SginupForm()
    return render(request,'user/sign-up.html',{'form':form})

没有一种自动方法可以知道电子邮件是否为临时电子邮件。所以我只会使用白名单。只需确保包含所有最受欢迎的电子邮件提供商(Google 搜索)。

创建电子邮件列表。作为良好实践,这应该作为 views.py 文件顶部的常量。

ALLOWED_EMAILS = ["gmail.com", "outlook.com", "yahoo.com"]

然后当您的用户提交注册表单时,只需验证电子邮件 地址以这些中的任何一个结尾。

以下条件检查电子邮件是否未以任何列入白名单的电子邮件结尾。在用户提交表单后立即添加它。添加您自己的自定义消息和重定向逻辑。

email = form.cleaned_data.get("email")
if not any(email.endswith(e) for e in ALLOWED_EMAILS):
    # Add a failure message to the request.
    # Redirect back to the login page.