2009-04-01 19 views
14

Duplicar posible:
Accepting email address as username in Django¿Cómo usar el correo electrónico en lugar del nombre de usuario para la autenticación del usuario?

modelo La autenticación proporcionada junto con Django se basa en nombre de usuario.

¿Qué hacer para cambiar la autenticación basada en el correo electrónico en lugar del nombre de usuario ?

Para ser más específicos:

Con la autenticación de nombre de usuario, a la conexión del usuario hacemos lo siguiente:

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

qué escribir para las declaraciones anteriores si se autentifica utilizando el correo electrónico?

Para forma:

Tengo la intención de escribir mi propia forma, que muestra los campos de correo electrónico, contraseña y la validación. ¿Es este el enfoque correcto?

Respuesta

1

Parece que puede enmascarar el nombre de usuario con la palabra "correo electrónico" y todos los nombres de usuario simplemente mostrarán el correo electrónico.

+0

Creo que no podemos usar el campo de nombre de usuario para correo electrónico ya que no pudimos almacenar @ símbolo en el nombre de usuario. –

+0

Hmm .... bueno, no sé por qué no, pero si ese es el caso, entonces mi sugerencia no es muy útil. – jerebear

+0

En Django 1.2, @ está permitido en los nombres de usuario, por lo que esta solución podría funcionar (y es bastante simple). – juanjux

5

Consulte this snippet, y lea los comentarios para las actualizaciones.

Para el formulario, ¿por qué no heredar (o utilizar) directamente el formulario de inicio de sesión de autenticación? Consulte django/contrib/auth/forms.py

+0

También vea el proyecto django-emailauth: http://github.com/redvasily/django-emailauth/tree/master/, que con suerte algún día apoyará el inicio de sesión del estilo EAUT. –

-1

A menos que me haya perdido algo, la solución debe ser muy simple; solo haga una forma normal con un campo de texto y un campo de contraseña. Cuando el método de solicitud HTTP es POST, intente buscar al usuario con la dirección de correo electrónico especificada. Si dicho usuario no existe, tiene un error. Si el usuario existe, intente autenticar al usuario y registrarla.

+0

Esto no está usando el Django ORM – elit3x

7

Encontré this snippet al leer una pregunta duplicada a esta. También puedes ver 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) 

Ninguna de las respuestas es originalmente mía. Hasta el voto en el otro hilo a los propietarios para el impulso de karma. Los copié aquí para hacer que este hilo sea lo más completo posible.

Cuestiones relacionadas