Как использовать электронную почту вместо имени пользователя для аутентификации пользователя?
Возможный дубликат:
Принятие адреса электронной почты в качестве имени пользователя в 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
Ответ 3
См. приведенную ниже ссылку, которая иллюстрирует способ решения проблемы.
http://groups.google.com/group/django-users/browse_thread/thread/c943ede66e6807c
Ответ 4
Похоже, вы можете просто замаскировать имя пользователя словом "электронная почта", и все имена пользователей будут отображаться вместо этого.
Ответ 5
Если я что-то пропустил, решение должно быть очень простым; просто создайте обычную форму с текстовым полем и полем пароля. Когда метод HTTP-запроса POST, попробуйте загрузить пользователя с заданным адресом электронной почты. Если такой пользователь не существует, у вас есть ошибка. Если пользователь существует, попробуйте аутентифицировать пользователя и войти в систему.