Dans Django, l'authentification est généralement effectuée à l'aide de noms d'utilisateur. Cependant, il est parfois préférable d'authentifier les utilisateurs via leur adresse e-mail. Cela soulève un défi, car Django utilise des noms d'utilisateur dans sa structure d'URL.
Pour surmonter cette limitation, vous pouvez écrire un backend d'authentification personnalisé. Ce backend vous permet de spécifier votre propre logique d'authentification :
<code class="python">from django.contrib.auth import get_user_model from django.contrib.auth.backends import ModelBackend class EmailBackend(ModelBackend): def authenticate(self, request, username=None, password=None, **kwargs): UserModel = get_user_model() try: user = UserModel.objects.get(email=username) except UserModel.DoesNotExist: return None else: if user.check_password(password): return user return None</code>
Ce backend authentifie les utilisateurs en fonction de leurs adresses e-mail et de leurs mots de passe.
Une fois que vous avez votre backend personnalisé, définissez-le comme backend d'authentification dans vos paramètres Django :
<code class="python">AUTHENTICATION_BACKENDS = ['path.to.auth.module.EmailBackend']</code>
Avec le backend personnalisé en place, vous pouvez authentifier les utilisateurs à l'aide de leurs adresses e-mail :
<code class="python">email = request.POST['email'] password = request.POST['password'] user = authenticate(request, username=email, password=password)</code>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!