首页 文章

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

提问于
浏览
15

可能重复:在Django中接受电子邮件地址作为用户名

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

如何根据电子邮件而不是用户名更改身份验证?

To be more specific

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

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

如果我们使用电子邮件进行身份验证,请写上述语句的内容?

For form

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

5 回答

  • 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 )
    

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

  • 5

    查看this snippet,并阅读更新评论 .

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

  • 3

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

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

  • 7

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

  • -1

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

相关问题