2009-04-01 6 views
14

Possible en double:
Accepting email address as username in DjangoComment utiliser le courrier électronique au lieu du nom d'utilisateur pour l'authentification de l'utilisateur?

Le modèle d'authentification fourni avec Django est basé sur nom d'utilisateur.

Que faire pour changer l'authentification basée sur l'email au lieu du nom d'utilisateur?

Pour être plus précis:

Avec l'authentification de nom d'utilisateur, pour ouvrir une session utilisateur, nous procédez comme suit:

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

quoi écrire pour les déclarations ci-dessus si nous authentifiez par courrier électronique?

Pour forme:

Je prévois d'écrire ma propre forme qui montre les champs email, mot de passe et la validation. Est-ce la bonne approche?

Répondre

1

On dirait que vous pouvez simplement masquer le nom d'utilisateur avec le mot "email" et tous les noms d'utilisateur auront juste l'email à la place.

+0

Je pense que nous ne pouvons pas utiliser le champ de nom d'utilisateur pour l'email car nous ne pourrions pas stocker le symbole @ dans le nom d'utilisateur. –

+0

Hmm .... eh bien, je ne sais pas pourquoi pas mais si c'est le cas ma suggestion n'est pas très utile. – jerebear

+0

Dans Django 1.2, vous êtes @ autorisé sur les noms d'utilisateur, donc cette solution pourrait fonctionner (et c'est assez simple). – juanjux

5

Consultez this snippet et lisez les commentaires pour les mises à jour.

Pour le formulaire, pourquoi ne pas simplement hériter de (ou utiliser directement) le formulaire de connexion auth. Voir django/contrib/auth/forms.py

+0

Voir également le projet django-emailauth: http://github.com/redvasily/django-emailauth/tree/master/ qui, nous l'espérons, soutiendra un jour le login de style EAUT. –

-1

À moins d'avoir manqué quelque chose, devrait être très simple la solution; faites juste un formulaire normal avec un champ de texte et un champ de mot de passe. Lorsque la méthode de requête HTTP est POST, essayez d'extraire l'utilisateur avec l'adresse de messagerie donnée. Si un tel utilisateur n'existe pas, vous avez une erreur. Si l'utilisateur existe, essayez d'authentifier l'utilisateur et connectez-vous.

+0

Ceci n'utilise pas l'ORM Django – elit3x

7

J'ai trouvé this snippet lors de la lecture d'une question en double à celui-ci. Jetez également 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) 

Aucune réponse est à l'origine la mienne. Up vote sur l'autre thread pour les propriétaires pour le karma boost. Je les ai juste copiés ici pour rendre ce fil aussi complet que possible.

Questions connexes