Système d'utilisateur basique avec flask

a marqué ce sujet comme résolu.

Bonjour,

J’aimerais créer un système d’utilisateur (connexion, session, deconnexion) avec python∕/flask en utilisant flask-login(https://flask-login.readthedocs.io/en/latest/).

Le problème c’est que j’ai beaucoup de mal à définir la classe User et la fonction load_user. Je cherche juste à faire un truc simple, sans même une base de donnée pour l’instant.

Exemple :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#ma partie login_manager
#ma classe User
#ma fonction load_user

@app.route('/login', methods=['GET','POST'])
def login():

    if request.method == 'POST':
        email = request.form.get('email')
        password = request.form.get('password')
        if email ='admin' and password == 'admin':
            return redirect(url_for('index'))
        else:
            flash('ERROR! Incorrect login credentials.', 'error')
    return render_template('login.html')

@app.route('/logout')
def logout():
    return redirect(url_for('login'))

#Et après bien sûr utiliser @login_required, logout_user(user), etc...

`

Comment je peux faire quelque chose de vraiment simple? ça fait des jours que je galère là dessus sans réussir à avoir le truc que je veux…

Merci d’avance.

Salut !

Je ne suis pas sûr de comprendre ce qui te pose problème.

Tu n’arrives pas à savoir ce que tu dois mettre dans ta classe User ? Parce que, a priori ta fonction load_user dois juste ressembler à ça (en lisant rapidement la doc, j’ai jamais utilisé flask-login) :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# Quelque part, tu as une liste d'utilisateurs (issue de ta base de données)
users = {'admin': {'password': 'admin'}} 
# les mots de passes doivent être hashés, pas en clair, mais j'ai simplifié pour l'exemple

# Et ensuite, tu définis ta fonction load_user()

@login_manager.user_loader
def load_user(email):
    if email not in users: # L'e-mail n'est pas valide, on retourne None
        return None
    else: #L'e-mail est valide, on cree un objet User avec comme id email.
        user = User()
        user.id = email
        return user

Concernant ta classe User, tu peux juste la faire hériter de UserMixin qui contient toutes méthodes de base, comme ceci :

1
2
class User(UserMixin):
    pass

Edit : pour ta fonction login(), il faut que tu crées un User aussi :

1
2
3
4
5
6
7
...
if email ='admin' and password == 'admin':  # La aussi il faudra hasher le mot de passe
    user = User()
    user.id = email
    flask_login.login_user(user)
    return redirect(url_for('index'))
...
+2 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte