IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Django Python Discussion :

Authentification par email


Sujet :

Django Python

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 69
    Points : 63
    Points
    63
    Par défaut Authentification par email
    Bonjour à vous, après avoir réussit à mettre en place l'authentification django j'aimerais maintenant pouvoir utiliser l'email à la place du pseudo. J'ai trouvé le paramètre "ACCOUNT_AUTHENTICATION_METHOD = 'email'" mais le seul changement c'est que je ne peux plus me connecter du tout, ni avec email, ni avec pseudo. Pour ceux qui ont l'habitude d'utiliser django et son authentification, votre aide serait plus que la bienvenue. Merci pour votre temps

    forms.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    from django.contrib.auth import authenticate, get_user_model
    from django import forms
    User = get_user_model()
     
    class ConnexionForm(forms.Form):
        email = forms.EmailField(label="Email", max_length=30)
        password = forms.CharField(label="Mot de passe", widget=forms.PasswordInput)

    models.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    from django.contrib.auth.models import User, BaseUserManager
    from django.db import models
     
    class Profil(models.Model):
        user = models.OneToOneField(User, on_delete=models.CASCADE) 
        site_web = models.URLField(blank=True)
        inscrit_newsletter = models.BooleanField(default=False)
     
        def __str__(self):
            return "Profil de {0}".format(self.user.username)
    views.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    from django.contrib.auth import authenticate, login, logout
    from django import forms
    from .forms import ConnexionForm
    from django.shortcuts import render, redirect
    from django.urls import reverse
     
     
    def connexion(request):
        error = False
     
        if request.method == "POST":
            form = ConnexionForm(request.POST)
            if form.is_valid():
                email = form.cleaned_data["email"]
                password = form.cleaned_data["password"]
                user = authenticate(email=email, password=password)
                if user:  
                    login(request, user)  
                else: 
                    error = True
        else:
            form = ConnexionForm()
     
        return render(request, 'connexion.html', locals())
     
    def deconnexion(request):
        logout(request)
        return redirect(reverse('connexion'))

  2. #2
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 69
    Points : 63
    Points
    63
    Par défaut
    Je me suis beaucoup renseigné sur le sujet et me voila encore plus perdu, je ne sais pas si il faut modifier le moteur d'authentification ou alors le remplacer par un nouveau. J'aimerais réussir à le faire mais aussi à le faire de la "bonne" façon, en tout cas de la façon la plus propre, la plus simple. Je continue de chercher, merci à vous

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 69
    Points : 63
    Points
    63
    Par défaut
    Finalement j'ai obtenu le résultat souhaité en recréant un moteur d'authentification, et l'ajoutant dans le fichier settings avec "AUTHENTICATION_BACKENDS". J'avais l'impression que le moteur de base de l'authentification de Django pouvait très bien réussir à le faire. Tant pis !

  4. #4
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    Bonjour,

    Effectivement il faudra que tu crées ton propre moteur d'authentification. En utilisant les outils à ta disposition comme check_password, car seul le mail ne suffit pas à se connecter heureusement...

    En fait le mail, c'est comme si tu te connectais en utilisant ton pseudo, donc on vérifie par rapport à la liste des utilisateurs déjà enregistrés.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    from django.contrib.auth import get_user_model
     
    def check(username=None, password=None):
        user_model = get_user_model()
        user = user_model.objects.get(email=username)
        if user.check_password(password):
            return user
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 69
    Points : 63
    Points
    63
    Par défaut
    Bonjour et merci à toi pour la réponse, mon moteur ressemble à peu prêt à ça et il fonctionne, maintenant j'essaye d'ajouter des champs aux user (ville,âge,etc...). Depuis que je me suis attaqué à Django j'ai dû faire énormément de recherche pour comprendre l'architecture et le framework en lui même mais j'apprends de jour en jour et c'est vraiment intéressant !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [2.x] FOSUserBundle - Authentification par email
    Par Adraesh dans le forum Symfony
    Réponses: 1
    Dernier message: 21/03/2012, 15h01
  2. [HTTP] authentification par méthode post
    Par G00x2 dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 03/07/2005, 15h05
  3. [1.1] Authentification par formulaire
    Par kakek dans le forum ASP.NET
    Réponses: 2
    Dernier message: 30/05/2005, 09h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo