Django需要所有身份验证电子邮件

Django需要所有身份验证电子邮件,django,django-allauth,Django,Django Allauth,在我的应用程序中,我需要用户使用他们的电子邮件和密码登录。它使用allauth创建一个注册表,其中电子邮件字段是可选的,还有用户名字段 我希望我的注册有三个字段: 电子邮件 密码 再次输入密码 我尝试过创建一个自定义表单,但由于某些原因它不起作用。我不知道如何从表单中删除用户名 class SignupForm(forms.Form): email = forms.EmailField(label='Email', required=True)

在我的应用程序中,我需要用户使用他们的电子邮件和密码登录。它使用allauth创建一个注册表,其中电子邮件字段是可选的,还有用户名字段

我希望我的注册有三个字段:

  • 电子邮件
  • 密码
  • 再次输入密码
我尝试过创建一个自定义表单,但由于某些原因它不起作用。我不知道如何从表单中删除用户名

class SignupForm(forms.Form):        
    email = forms.EmailField(label='Email', required=True)        
    class Meta:
        model = get_user_model()       
    def save(self, user):
        user.email = self.cleaned_data['email']
        user.save()

它只需要允许我正确注册用户,然后我就可以处理其余的问题。首先,您应该使用
ModelForm
来保存和对象实例以及表单数据,或者您可以使用内置的
UserCreationForm
更多详细信息:

在models.py文件中,您应该将
电子邮件
字段指定为
用户名字段
。退房

最后是登录部分。您应该编写自己的自定义登录视图,以允许用户使用其电子邮件登录。在您的URL中放入如下内容:

(r'^email-login/', 'app.views.email_login', name="login"),
views.py

from django.contrib.auth import authenticate, login

def email_login(request):
    email = request.POST['email']
    password = request.POST['password']
    try:
        get_user = UserProfile.objects.get(email=email)
    except:
        get_user = None

    user = authenticate(username=get_user, password=password)
    if user is not None:
        if user.is_active:
            login(request, user)
我没有测试代码,但一旦我用这种方法解决了我的问题。因此,这些可能会给你一些如何做到这一点的想法。我相信你能从中找到你需要的大部分答案


如果需要任何额外信息,请发表评论。

解决方法很简单,只是配置问题。我在设置文件中添加了以下内容:

ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_USERNAME_REQUIRED = True
ACCOUNT_SIGNUP_FORM_CLASS = 'accounts.forms.SignupForm'

我同意Callum接受的答案,除了输入错误(所需帐户\用户名\应为False)。然而,我没有足够的分数以评论的形式留下我的贡献。Django 1.7的以下工作

在settings.py中:

# Sign IN settings
ACCOUNT_AUTHENTICATION_METHOD = 'email'

# Sign UP settings
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_USERNAME_REQUIRED = False

这是一个老生常谈的问题,但如果它将来对某人有所帮助,django allauth在其文档中会这样说:

帐户身份验证方法(「用户名」「电邮」「用户名」电邮) 指定要使用的登录方法–用户是通过输入用户名、电子邮件地址登录,还是同时输入用户名和电子邮件地址

帐户\用户名\必需(=真) 用户在注册时需要输入用户名。请注意,即使ACCOUNT_AUTHENTICATION_METHOD设置为email,也会要求用户这样做。如果不希望提示用户输入用户名,则设置为False

因此,在您的settings.py中,您可以执行以下操作:

ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_UNIQUE_EMAIL = True
ACCOUNT_EMAIL_VERIFICATION = 'mandatory'
ACCOUNT_USERNAME_REQUIRED = False
ACCOUNT_AUTHENTICATION_METHOD = 'email'
有关django allauth配置的更多信息,请阅读此处:

在我的用户模型中,我总是有这个用户名字段=“email”。我不想创建一些电子邮件登录,这很好。我要做的是为注册表单设置用户名和密码,因为默认情况下,它包含用户名、电子邮件(可选)和密码,如果用户因为无法登录而不输入电子邮件,则这些都不是很有用。
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_UNIQUE_EMAIL = True
ACCOUNT_EMAIL_VERIFICATION = 'mandatory'
ACCOUNT_USERNAME_REQUIRED = False
ACCOUNT_AUTHENTICATION_METHOD = 'email'