2016-05-05 1 views
0

écrire ma propre backend d'authentification dans le fichier project/emailauth.py avec le contenu:Django authentifie par email

from django.contrib.auth.hashers import check_password 
from django.contrib.auth.models import User 

class EmailBackend(object): 
    def authenticate(self, username=None, password=None): 
     print("Email auth") 
     try: 
      user = User._default_manager.get(email=username) 
      if user.check_password(password): 
       return user 
     except User.DoesNotExist: 
      return None 
     except: 
      return None 

    def get_user(self, user_id): 
     try: 
      return User._default_manager.get(pk=user_id) 
     except User.DoesNotExist: 
      return None 

Dans mon project/settings.py à la fin du fichier, j'ai ajouté le contenu:

AUTHENTICATION_BACKENDS = (
    'project.emailauth.EmailBackend', 
    'django.contrib.auth.backends.ModelBackend', 
) 

J'utilise Authentifier Methon à userprofile/views.py:

from django.contrib.auth import authenticate, login, logout 
#... 
     if form.is_valid(): 
      username = form.cleaned_data['username'] 
      password = form.cleaned_data['password'] 
      profile = authenticate(username=username, password=password) 
      if profile is not None: 
       login(request, profile) 
       return HttpResponseRedirect(redirect_to) 
#... 

Les mos t intéressant je remarque que la sortie de la console Email auth seulement quand j'essaye de me connecter par nom d'utilisateur et mot de passe si j'utilise l'email et le mot de passe il n'y a pas de sortie dans la console. On dirait que mon authentification personnalisée se déclenche après la méthode standard ...

Quelqu'un peut-il me montrer où j'ai fait une erreur?

Répondre

0

Il s'est avéré que mon formulaire de validation de trou de validation de formulaires par email (parce que c'est vérifier si les utilisateurs existent dans la base de données avant d'essayer d'authentifier) ​​