Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Flask-Login:Kann nicht verstehen, wie es funktioniert

Flask-Login hat eigentlich kein Benutzer-Backend, es verwaltet nur die Sitzungsmaschinerie, um Ihnen beim An- und Abmelden von Benutzern zu helfen. Sie müssen ihm (durch Dekorationsmethoden) sagen, was einen Benutzer darstellt, und es liegt auch an Ihnen, herauszufinden, ob ein Benutzer "aktiv" ist oder nicht (da "aktiv" in verschiedenen Anwendungen verschiedene Dinge bedeuten kann ).

Sie sollten die Dokumentation lesen und seien Sie sicher, was es tut und was nicht . Hier werde ich mich nur darauf konzentrieren, es mit dem db-Backend zu verbinden.

Definieren Sie zunächst ein Benutzerobjekt; die Eigenschaften für Ihre Benutzer darstellt. Dieses Objekt kann dann Datenbanken oder LDAP oder was auch immer abfragen und es ist der Haken, der den Anmeldemechanismus mit Ihrem Datenbank-Backend verbindet.

Ich werde das Anmeldebeispiel verwenden Skript für diesen Zweck.

class User(UserMixin):
    def __init__(self, name, id, active=True):
        self.name = name
        self.id = id
        self.active = active

    def is_active(self):
        # Here you should write whatever the code is
        # that checks the database if your user is active
        return self.active

    def is_anonymous(self):
        return False

    def is_authenticated(self):
        return True

Nachdem Sie das Benutzerobjekt erstellt haben, müssen Sie eine Methode schreiben, die den Benutzer lädt (im Grunde erstellt sie eine Instanz des User Klasse von oben). Diese Methode wird mit der Benutzer-ID aufgerufen.

@login_manager.user_loader
def load_user(id):
     # 1. Fetch against the database a user by `id` 
     # 2. Create a new object of `User` class and return it.
     u = DBUsers.query.get(id)
    return User(u.name,u.id,u.active)

Sobald Sie diese Schritte ausgeführt haben, führt Ihre Anmeldemethode Folgendes aus:

  1. Überprüft, ob der Benutzername und das Passwort (mit Ihrer Datenbank) übereinstimmen - Sie müssen diesen Code selbst schreiben.

  2. Wenn die Authentifizierung erfolgreich war, sollten Sie eine Instanz des Benutzers an login_user() übergeben