2009-04-01 4 views
14

Eventuali duplicati:
Accepting email address as username in DjangoCome utilizzare l'e-mail al posto del nome utente per l'autenticazione dell'utente?

Il modello di autenticazione fornito insieme a Django si basa su nome utente.

Cosa fare per modificare l'autenticazione basata su e-mail al posto del nome utente ?

Per essere più precisi:

Con l'autenticazione nome utente, a utenti registrati facciamo la seguente:

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

cosa scrivere per le dichiarazioni di cui sopra se stiamo autenticato tramite e-mail?

Per forma:

sto progettando di scrivere la mia forma che mostra i campi e-mail, la password e la convalida. È questo l'approccio corretto?

risposta

1

Suoni come si può semplicemente mascherare il nome utente con la parola "e-mail" e tutti i nomi utente avranno solo l'e-mail si mostrano invece.

+0

Penso che non possiamo usare il campo del nome utente per la posta elettronica poiché non siamo riusciti a memorizzare il simbolo @ nel nome utente. –

+0

Hmm .... beh, non so perché no ma se questo è il caso, allora il mio suggerimento non è molto utile. – jerebear

+0

In Django 1.2, @ è consentito sui nomi utente, quindi questa soluzione potrebbe funzionare (ed è piuttosto semplice). – juanjux

5

Verificare this snippet e leggere i commenti per gli aggiornamenti.

Per il modulo, perché non solo ereditare (o utilizzare direttamente) il modulo di login auth. Vedi django/contrib/auth/forms.py

+0

Vedere anche il progetto django-emailauth: http://github.com/redvasily/django-emailauth/tree/master/ che si spera possa un giorno supportare anche il login in stile EAUT. –

-1

A meno che ho perso qualcosa, la soluzione dovrebbe essere molto semplice; basta creare un modulo normale con un campo di testo e un campo password. Quando il metodo di richiesta HTTP è POST, provare a recuperare l'utente con l'indirizzo e-mail specificato. Se tale utente non esiste, si ha un errore. Se l'utente esiste, prova ad autenticare l'utente ed autenticarlo.

+0

Questo non sta usando l'ORM Django – elit3x

7

Ho trovato this snippet durante la lettura di una domanda duplicata con questa. Controllare anche 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) 

Né risposta è originariamente il mio. Vai a votare sull'altro thread ai proprietari per il potenziamento del karma. Li ho appena copiati qui per rendere questo thread il più completo possibile.

Problemi correlati