首页 > 解决方案 > Django-allauth 将注册限制为电子邮件列表

问题描述

我正在使用 Django-allauth,我有一个电子邮件列表,我想将注册限制在这个列表中。我的想法是检查注册用户的电子邮件,如果不在电子邮件列表中,则停止注册过程并重定向。正如 Chetan Ganji 所建议的,我尝试编辑 allauth.account.views.SignupView 但它不订阅 form_valid 方法。我怎样才能做到这一点?谢谢你的帮助

from allauth.account.views import SignupView

class AllauthCustomSignupView(SignupView):

    def form_valid(self, form):
        email = form.cleaned_data['email']
        auth_user_list =    [   'email_1',
                                'email_2',
                                ...
                            ]

        if not any(email in s for s in auth_user_list):
            return reverse('url')
        return super(MySignupView, self).form_valid(form)

标签: pythondjangodjango-allauth

解决方案


你可以通过扩展DefaultAccountAdapter类来做到这一点。您必须想办法按需存储和获取受限列表。然后,您可以使用适配器并在注册中引发验证错误。扩展 aDefaultAccountAdapter并覆盖 clean_email 方法。在您的项目目录中创建一个 adapter.py 并扩展默认的适配器类。

from allauth.account.adapter import DefaultAccountAdapter
from django.forms import ValidationError

class RestrictEmailAdapter(DefaultAccountAdapter):

    def clean_email(self,email):
        RestrictedList = ['Your restricted list goes here.']
        if email in RestrictedList
            raise ValidationError('You are restricted from registering. Please contact admin.')
        return email

最后,将 settings.py 中的帐户适配器指向您的扩展类。

ACCOUNT_ADAPTER = 'YourProject.adapter.RestrictEmailAdapter'

推荐阅读