如何使用电子邮件而不是用户名进行用户身份验证

时间:2009-04-01 05:26:29

标签: django

  

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

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

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

更具体一点

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

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

如果我们要进行身份验证,请为上述声明撰写内容 使用电子邮件?

表单

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

5 个答案:

答案 0 :(得分:7)

我在阅读重复的问题时找到了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 )

这两个答案都不是我的。向另一个主题投票给业主以获得业力提升。我只是将它们复制到这里以使这个线程尽可能完整。

答案 1 :(得分:5)

查看this snippet,阅读更新评论。

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

答案 2 :(得分:3)

请参阅以下链接,说明我们应该如何解决问题。

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

答案 3 :(得分:1)

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

答案 4 :(得分:-1)

除非我错过了什么,否则解决方案应该非常简单;只需使用文本字段和密码字段创建一个普通表单。当HTTP请求方法是POST时,尝试使用给定的电子邮件地址获取用户。如果此类用户不存在,则表示您有错误。如果用户确实存在,请尝试对用户进行身份验证并将其登录。