Как использовать электронную почту вместо имени пользователя для аутентификации пользователя?

Возможный дубликат:
Принятие адреса электронной почты в качестве имени пользователя в Django

Модель аутентификации, предоставляемая вместе с Django, основана на имя пользователя.

Что делать, чтобы изменить аутентификацию на основе электронной почты вместо имя пользователя?

Чтобы быть более конкретным:

С помощью аутентификации пользователя, чтобы войти в систему, мы делаем следующее:

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

Что писать для вышеуказанных утверждений, если мы аутентифицируем используя электронную почту?

Для формы:

Я планирую написать свою собственную форму, которая показывает поля адрес электронной почты, пароль и подтверждение. Это правильный подход?

Ответ 1

Я нашел этот фрагмент при чтении дублирующего вопроса к этому. Также проверьте этот код:

class UserForm( forms.ModelForm ):
    class Meta:
        model= User
        exclude= ('email',)
    username = forms.EmailField(max_length=64,
        help_text = "The person 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

Отметьте этот фрагмент и прочитайте комментарии для обновлений.

Для формы, почему бы просто не наследовать (или напрямую использовать) регистрационную форму auth. См. Django/contrib/auth/forms.py

Ответ 4

Похоже, вы можете просто замаскировать имя пользователя словом "электронная почта", и все имена пользователей будут отображаться вместо этого.

Ответ 5

Если я что-то пропустил, решение должно быть очень простым; просто создайте обычную форму с текстовым полем и полем пароля. Когда метод HTTP-запроса POST, попробуйте загрузить пользователя с заданным адресом электронной почты. Если такой пользователь не существует, у вас есть ошибка. Если пользователь существует, попробуйте аутентифицировать пользователя и войти в систему.