【问题标题】:email authentification doesn't work using django-allauth使用 django-allauth 无法进行电子邮件身份验证
【发布时间】:2018-09-14 06:35:58
【问题描述】:

我安装了 django-allauth 并将其设置为用于互联网注册和身份验证后端,以便在注册时收到电子邮件确认并使用他们的电子邮件而不是用户名注册用户。

正在发生的事情是注册工作完美,使用电子邮件的身份验证不起作用,而使用用户名。我收到以下错误:

您指定的电子邮件地址和/或密码不正确。

这是我当前的配置:

  • Django-allauth:0.35.0
  • Django:1.11
  • Python:3.6.4
  • mysql: 15.1
# settings.py

SITE_ID = 1

DJANGO_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.sites',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]
THIRD_PARTY_APPS = [
    'allauth',
    'allauth.account',
    'allauth.socialaccount',
]

AUTHENTIFICATION_BACKENDS = [
        'django.contrib.auth.backends.ModelBackend',
        'allauth.account.auth_backends.AuthenticationBackend',
]
LOGIN_REDIRECT_URL = 'main:home'
LOGOUT_REDIRECT_URL = 'main:home'

TEMPLATES = [
   {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [
            os.path.join(APPS_DIR, 'templates'),
        ],
        'OPTIONS': {
            'debug': DEBUG,
            'loaders': [
                'django.template.loaders.filesystem.Loader',
                'django.template.loaders.app_directories.Loader',
            ],
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.template.context_processors.media',
                'django.template.context_processors.i18n',
                'django.template.context_processors.static',
                'django.template.context_processors.tz',
                'django.contrib.messages.context_processors.messages',
            ],
       },
    },
]

ACCOUNT_AUTHENTICATION_METHOD = 'username_email'
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_USERNAME_REQUIRED = False
ACCOUNT_EMAIL_VERIFICATION = 'mandatory'
ACCOUNT_CONFIRM_EMAIL_ON_GET = True
# url.py

urlpatterns = [
    # Django admin
    url(settings.ADMIN_URL, admin.site.urls),

    url(r'', include('main.urls')),
    url(r'^accounts/', include('allauth.urls')),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

我希望我提供了所有有用的信息。我想知道我是否错过了配置问题,或者某处是否存在错误。如果您需要更多信息,请告诉我,我很乐意为您提供帮助。

【问题讨论】:

    标签: python django authentication django-allauth


    【解决方案1】:

    经过一番思考和研究,我找到了一种解决方法,方法是编写自己的适配器,如the documentation 中所述。它包括重写方法save_user()。

    为了继续,您首先需要通过编辑settings.py 并添加以下行来告诉您的应用新适配器在哪里:

    ACCOUNT_ADAPTER = 'yourproject.yourapp.file.classname'
    

    然后创建适配器文件如yourproject/yourapp.file.py,在我的例子中我调用了file.pyadapter.py并添加以下代码:

    from allauth.account.adapter import DefaultAccountAdapter
    
    class AccountAdapter(DefaultAccountAdapter):
    
        def save_user(self, request, user, form, commit=True):
            data = form.cleaned_data
            user.email = data.get('email')
            user.username = data.get('email')
            if 'password1' in data:
                user.set_password(data["password1"])
            else:
                user.set_unusable_password()
            self.populate_username(request, user)
            if commit:
                # Ability not to commit makes it easier to derive from
                # this adapter by adding
                user.save()
            return user
    

    基本上,它真的很接近actual method,除了我将电子邮件保存为django系统中的用户名。如果您想避免与用户混淆并强制username 字段显示email,您还需要编辑login.html 模板。

    为避免与格式错误的电子邮件地址相关的任何问题,您可以添加一个验证器为described in the documentation。

    # In validators.py
    
    from django.core.validators import EmailValidator
    
    
    custom_username_validators = [ASCIIUsernameValidator()]
    
    
    # In settings.py
    
    ACCOUNT_USERNAME_VALIDATORS = 'some.module.validators.custom_username_validators'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-16
      • 1970-01-01
      • 1970-01-01
      • 2012-08-10
      • 2017-05-20
      • 2011-09-16
      • 1970-01-01
      • 2013-07-01
      相关资源
      最近更新 更多