【问题标题】:How to use email instead of username for user authentication? [duplicate]如何使用电子邮件而不是用户名进行用户身份验证? [复制]
【发布时间】:2010-10-16 19:01:05
【问题描述】:

可能重复:
Accepting email address as username in Django

与 Django 一起提供的身份验证模型基于 用户名。

如何更改基于电子邮件而不是基于电子邮件的身份验证 用户名?

更具体

使用用户名身份验证,登录用户我们执行以下操作:

 user = authenticate(name,password)
 .......
 login(request,user)

如果我们要进行身份验证,为上述语句写什么 使用电子邮件?

表格

我打算编写自己的表单来显示字段 电子邮件、密码和验证。 这是正确的方法吗?

【问题讨论】:

  • 如果您希望人们使用他们的电子邮件地址而不是他们的用户名登录,那么创建一个自定义身份验证后端。

标签: django


【解决方案1】:

我在阅读此问题的重复问题时发现了this snippet。另请查看this code

class UserForm( forms.ModelForm ):
    class Meta:
        model= User
        exclude= ('email',)
    username = forms.EmailField(max_length=64,
        help_text = "The person's email address.")
    def clean_email( self ):
        email= self.cleaned_data['username']
        return email

class UserAdmin( admin.ModelAdmin ):
    form= UserForm
    list_display = ( 'email', 'first_name', 'last_name', 'is_staff' )
    list_filter = ( 'is_staff', )
    search_fields = ( 'email', )

admin.site.unregister( User )
admin.site.register( User, UserAdmin )

这两个答案都不是我的。在另一个线程上投票给所有者以提升业力。我只是将它们复制到这里以使该线程尽可能完整。

【讨论】:

    【解决方案2】:

    查看this snippet,并阅读 cmets 以获取更新。

    对于表单,为什么不直接继承(或直接使用)auth 登录表单。见 django/contrib/auth/forms.py

    【讨论】:

    【解决方案3】:

    请参阅下面的链接,该链接说明了我们应该解决问题的方式。

    http://groups.google.com/group/django-users/browse_thread/thread/c943ede66e6807c

    【讨论】:

      【解决方案4】:

      听起来你可以用“电子邮件”这个词来掩盖用户名,所有用户名都会显示电子邮件。

      【讨论】:

      • 我认为我们不能将用户名字段用于电子邮件,因为我们无法在用户名中存储@符号。
      • 嗯....好吧,我不知道为什么不这样做,但如果是这样的话,那么我的建议不是很有帮助。
      • 在 Django 1.2 中,@ 允许在用户名上使用,所以这个解决方案可以工作(而且非常简单)。
      • 它只允许最多 30 个字符的电子邮件。通过将 from django.contrib.auth.forms import AuthenticationForm AuthenticationForm.base_fields['username'].max_length = 75 添加到 models.py 来扩展它。谢谢 sijojamesjohn。
      【解决方案5】:

      除非我错过了什么,否则解决方案应该非常简单;只需制作一个带有文本字段和密码字段的普通表单。当 HTTP 请求方法为 POST 时,尝试获取具有给定电子邮件地址的用户。如果这样的用户不存在,则会出现错误。如果用户确实存在,请尝试对用户进行身份验证并登录。

      【讨论】:

      • 这不是使用 Django ORM
      猜你喜欢
      • 1970-01-01
      • 2016-07-26
      • 1970-01-01
      • 1970-01-01
      • 2016-12-11
      • 1970-01-01
      • 2015-03-13
      • 2017-09-25
      • 2017-12-28
      相关资源
      最近更新 更多