Forum Programmation.python Mini logiciel de connexion besoin d'aide sur mon code

Posté par  . Licence CC By‑SA.
Étiquettes :
-7
12
juil.
2023

main.py fichier principal Besoin d'aide def ValideUser concernant la logique du try pour se connecter

######################
from PyQt5 import QtCore, QtGui, QtWidgets
from projet import Ui_MainWindow
import sys
import st

class Bd(QtWidgets.QMainWindow):
    def __init__(self):
        super(Bd, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.Bd = st.Bd()
        self.ui.page.setCurrentIndex(0)
        self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
        # Menu de Navigation
        self.ui.MenuPrincipalBtn.clicked.connect(lambda: self.ui.page.setCurrentIndex(0))
        self.ui.CreerCompteMenuBtn.clicked.connect(lambda: self.ui.page.setCurrentIndex(2))
        self.ui.SeconnecterMenuBtn.clicked.connect(lambda: self.ui.page.setCurrentIndex(1))
        self.ui.QuitterBtn.clicked.connect(lambda: self.close())
        # Fin de Navigation
        self.ui.CreerCompteBtn.clicked.connect(self.CreateUserAccount)
        self.ui.SeconncterBtn.clicked.connect(self.ValideUser)

    def CreateUserAccount(self):
        Nom = self.ui.lineEditNomCreerCompte.text()
        Email = self.ui.lineEditMailCreerCompte.text()
        Password = self.ui.lineEditPasswordCreerCompte.text()
        Data = (Nom,Email,Password)
        if self.Bd.ConnectUser(Data,) == 0:
            self.ui.CreerComptelabel.setText("Votre compte a été bien créé")
            self.ui.CreerComptelabel.setStyleSheet("color:green; font:13px")
        self.ui.lineEditNomCreerCompte.setText('')
        self.ui.lineEditMailCreerCompte.setText('')
        self.ui.lineEditPasswordCreerCompte.setText('')

    def ValideUser(self):
        Email = self.ui.lineEditMailSeConnecter.text()
        Password = self.ui.lineEditPasswordSeConnecter.text()
        try:
            self.Bd.ValideUser(Email,Password)  # Pass Email and Password separately
            self.ui.labelSeConnecter.setText("Votre compte est bien connecté!")
        finally:
            self.ui.labelSeConnecter.setText("Les informations saisies ne sont pas correctes !")


if __name__ == "__main__":
    App = QtWidgets.QApplication([])
    Win = Bd()
    Win.show()
    sys.exit(App.exec())

st.py fichier base de donnée Besoin d'aide au niveau de def ValideUser et def ValideUser

#######################
import sqlite3,smtplib,ssl
from email.message import EmailMessage

class Bd():
    def __init__(self):
        self.Connexion = sqlite3.connect("ctl.db")
        self.Cursor = self.Connexion.cursor()

    def ConnectUser(self,Data):
        Req = "INSERT INTO user(Nom,Email,Password) VALUES(?,?,?)"
        self.Cursor.execute(Req,Data)
        self.Connexion.commit()
        return 0


    def ValideUser(self,Email,Password):
        Req = "SELECT Email FROM user WHERE Email = ?"
        self.Cursor.execute(Req,(Email,Password))
        return print(self.Cursor.fetchall()[0][0])
  • # Roooh

    Posté par  . Évalué à 6.

    Ça stocke le mot de passe en clair dans la base, dis-donc ?

    • [^] # Re: Roooh

      Posté par  (Mastodon) . Évalué à 3.

      Boudu ! C'est pas bien !

      Pour ça on peut passer par Werkzeug qui fait très bien le hashing + salage.

      En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.

      • [^] # Re: Roooh

        Posté par  (Mastodon) . Évalué à 2. Dernière modification le 13 juillet 2023 à 09:25.

        Werkzeug est un serveur WSGI, utilisé pour le débogage de Flask par exemple - on ajouterai dans ce cas une grosse lib dans les dépendances pour n'utiliser qu'une toute petite fonction…

        La seule librairie hashlib serait beaucoup plus adaptée - d'ailleurs c'est ce qui est utilisé par Werkzeug pour faire hashing / salage…

        Cette lib a l'énorme avantage de faire partie de python !

        Courage !

        • [^] # Re: Roooh

          Posté par  (Mastodon) . Évalué à 3. Dernière modification le 13 juillet 2023 à 09:36.

          Oui mais quand tu n'as que hashlib, c'est à toi de gérer le salage, et tu peux ne pas bien le faire. Passer par une lib de plus haut niveau te garantie une bonne implémentation complète.

          J'ai cité Werkzeug parce que en effet je m'en sers dans le cadre d'une appli Flask, mais il y en a d'autres, sûrement plus légères en effet, notamment argon2-cffi.

          En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.

          • [^] # Re: Roooh

            Posté par  (Mastodon) . Évalué à 3.

            Du coup je viens de re-regarder cette lib, c'est vraiment la Rolls !!! À utiliser sans modération, je vais switcher dessus au prochain besoin.

            En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.

          • [^] # Re: Roooh

            Posté par  (Mastodon) . Évalué à 1.

            Super ! Merci !

        • [^] # Re: Roooh

          Posté par  . Évalué à 3.

          utilisé pour le débogage de Flask

          Ce n'est pas vraiment utilisé pour le débogage ; Flask s'appuie sur Werkzeug + une lib de template pour devenir le framework qu'il est. En gros Flask est une surcouche.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.