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 :

Django: comment 'automatiser' lenvoie des login/mot de passe utilisateurs ?


Sujet :

Django Python

  1. #1
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2011
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2011
    Messages : 257
    Points : 76
    Points
    76
    Par défaut Django: comment 'automatiser' lenvoie des login/mot de passe utilisateurs ?
    Bonjour,

    Je suis débutant en développement et en Django notamment.
    J'ai développé un projet qui est en test et je commence à réfléchir à la mise en prod et notamment l'initialisation de la base de données et la création des utilisateurs.

    Je ne sais pas trop quelle est l'approche la plus simple et efficace...
    j'ai chercher sur google mais je n'ai rien trouvé à ce sujet...

    Je vais avoir plus d'une trentaine de comptes utilisateurs à créer d'un coup, et j'ai donc écris un script que je lancerai sur la base de prod
    outre la gestion du hashage du mot de passe (pour le moment, j'utilise un shell python pour utiliser la fonction make_password() tet créé un mot de passe valide) dans ce script, je me pose la question de savoir comment envoyer les login/mdp de façon automatiser à mes utilisateurs.

    je n'ai pas vu d'option 'envoie identifiants par mail' dans l'interface admin de Django pourtant très complète

    j’imagine donc qu'il faut que je créé une application ou au moins un script pour le gérer ?

    d'avance merci pour vos commentaires, suggestions...
    cordialement

  2. #2
    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
    L'automatisation au mieux serait d'utiliser les signaux en Django, en indiquant dès l'enregistrement de tes utilisateurs, l'envoi de mail à chacun d'eux...

    Les signaux sont à utiliser avec parcimonie, mais dans ton cas de figure, il est exactement créé pour cela.

    j'ai donc écris un script que je lancerai sur la base de prod
    Avant mieux vaut créér cela en développement, faire des tests et si tout se passe bien, faire un dump de ta base sur la prod.
    Si sur la prod tu as déjà des données, faire un dump de ce qui est en prod, puis l'utiliser en dev pour tests.

    je n'ai pas vu d'option 'envoie identifiants par mail' dans l'interface admin de Django pourtant très complète
    Pas besoin, dans l'ordre vérifie que
    • tu obliges de renseigner le mail de l'utilisateur


    Crée un signal qui envoie le mail lors de la création de l'utilisateur, d'ailleurs la création du mot de passe peut se faire à cet instant aussi.

    Bonne continuation...
    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)

  3. #3
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2011
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2011
    Messages : 257
    Points : 76
    Points
    76
    Par défaut
    super, merci pour ta réponse
    je vais chercher de ce côté là
    bon week end...

  4. #4
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2011
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2011
    Messages : 257
    Points : 76
    Points
    76
    Par défaut Mot de passe mis à jour dans code ne fonctionne pas
    Je comprends que la sécurisation des mots de passe est très sensible
    mais je ne comprends pas comment on peut gérer des dizaines de comptes utilisateurs sans automatiser les envois par mail aux utilisateurs des paramètres de connexion
    Or cela ne semble pas simple dans Django... en tout cas je n'ai pas trouvé grand chose dans mes recherches...

    Voilà la procédure que j'imagine :
    1. Je créer mes utilisateurs et les profils associés en lançant un script sql sur ma base de données Postgresql et je laisse volontairement le champ password NULL et initialise la variable pro_con = 0 dans le profile
    2. Pour envoyer un email à l'utilisateur, j'utilise la mise à jour du champ pro_con 0 -> cela mets à jour la variable password de user (j'encode en utilisant make_password()) avec un mot de passe temporaire que l'utilisateur devra modifier et envoie l'email (et là j'ai bien le mot de passe en clair)

    En dehors du fait que cela ne soit pas une bonne pratique (merci pour vos avis), celà ne fonctionne pas, je n'arrive pasà me connecter avec le mot de passe temporaire

    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
     
     
    def send_user_account(sender,instance,**kwargs):
        if not instance._state.adding:
            print ('this is an update')
            print(instance.user)
            for key,value in kwargs.items():
                print(key,value)
            user = User.objects.get(username=instance.user)
            temporary_password = user.username
            print(temporary_password)
            user.password = make_password(temporary_password)
            user.save()
            print(user.password)
        else:
            print ('this is an insert')
     
    pre_save.connect(send_user_account, sender=Profile)

  5. #5
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2011
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2011
    Messages : 257
    Points : 76
    Points
    76
    Par défaut send_user_account n'est pas appelé par script
    En fait, je mettais à jour un compte lambda (pas superuser) et testais la modification du mot de passe sur la connexion à l'interface admin...
    donc çà fonctionne, maintenant, est-ce que c'est une bonne pratique ?

    par ailleurs, si je peux bien créer mes utilisateurs en lançant un script, je constate que la mise à jour de la variable pro_con à l'aide d'un script ne permet pas d'envoyer l'email
    cela doit être dû au signal que j'utilise ?

  6. #6
    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
    J'ai pas compris l'histoire du champ pro_conJe ne vois pas l'envoi du mail dans le signal... c'est un peu dommage de ne pas l'automatiser dans ce même signal, c'est un choix ?
    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)

  7. #7
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2011
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2011
    Messages : 257
    Points : 76
    Points
    76
    Par défaut
    pardon, je n'avais pas mis à jour mon code (ci-dessous)
    tu verras qu'effectivement j'envoie le mail dans ce signal

    j'ai ajouté une variable pro_mai spécifique (à la place de pro_con) dans le modèle Profile qui déclenchera l'envoi du mail


    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
    29
    30
    31
     
    class Profile(SafeDeleteModel):
    ...
    pro_mai = models.IntegerField("Send user login/password? (y/n)",default=0, null=True, blank=True)
    ...
     
    def send_user_account(sender,instance,**kwargs):
     
     
        if not instance._state.adding and instance.pro_mai == 1:
            user = User.objects.get(username=instance.user)
            # mail user
            str = string.ascii_lowercase
            temporary_password = ''.join(random.choice(str) for i in range(8))
            user.password = make_password(temporary_password)
            user.save()
            subject = 'User account Intense TBM ANRS 12398'
            message = 'Please find enclosed your temporarly login: \n Login: '+user.username+'\n Password: '+temporary_password+'\n\nThese login are personal.\nPlease change it when you first loggin.\nYou should not share it with anyone.'
            email_from = 'Mereva administrator - Intense TBM'
            recipient_list = [user.email]
            send_mail(subject, message, email_from, recipient_list)
            # mail administrateur
            adm_subject = 'Compte utilisateur Intense TBM ANRS 12398 '+user.username
            adm_message = 'Identifiants transmis à '+user.username
            adm_email_from = 'Mereva administrator - Intense TBM'
            adm_recipient_list = ['jerome.le-carrou@u-bordeaux.fr']
            send_mail(adm_subject, adm_message, adm_email_from, adm_recipient_list)      
        else:
            pass
     
    pre_save.connect(send_user_account, sender=Profile)

  8. #8
    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
    Le soucis reste encore d'actualité ?

    Pourquoi ne pas avoir envoyé tes mails après que l'utilisateur soit assuré d'être créé ?

    Sinon

    est inutile...

    Tu peux voir aussi du côté du paramètre update_fields
    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)

Discussions similaires

  1. Réponses: 0
    Dernier message: 21/02/2012, 10h51
  2. Réponses: 1
    Dernier message: 19/09/2011, 14h22
  3. Login/Mot de passe et récupération des infos pour connection automatique
    Par kitesilver dans le forum Général Conception Web
    Réponses: 4
    Dernier message: 07/06/2007, 14h51
  4. Réponses: 5
    Dernier message: 07/03/2007, 22h55
  5. [LoginModule][Jboss] Comment se servir des Login Module ?
    Par kurtalis dans le forum Wildfly/JBoss
    Réponses: 8
    Dernier message: 11/05/2006, 11h01

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