Heim >Backend-Entwicklung >Python-Tutorial >So führen Sie die Benutzerauthentifizierung mit Flask-Login durch
In diesem Artikel werden wir uns die verschiedenen Funktionen ansehen, die Flask-Login anbietet, und wie sie mit ihnen eine sichere Benutzeranmeldungsfunktion für Ihre Webanwendung erstellen. Am Ende dieses Artikels haben Sie ein gutes Verständnis dafür, wie Sie Flask-Login verwenden, um eine sichere Benutzerauthentifizierung in Ihren Flask-Anwendungen zu implementieren.
Authentifizierung ist ein wichtiger Bestandteil einer Webanwendung, mit der Benutzer auf Daten oder Ressourcen zugreifen können, da nur die richtigen Personen Zugriff auf vertrauliche Informationen erhalten. Dies kann auch im Kolben unter Verwendung des Flaskendlogins erreicht werden.
Flask-Login ist eine Erweiterung im Flask mit Funktionen, die die Protokollierung und die Anmeldung von Benutzern abwickeln und die aktuellen Benutzer während der gesamten Anwendung verfolgen. Dies erleichtert die Implementierung der Authentifizierung und Autorisierung in Ihren Flask -Anwendungen.
Flask-Login verfügt über eine Reihe von Funktionen und Funktionen, mit denen die Authentifizierung in Flask-Anwendungen nahtlos durchgeführt werden kann. Hier sind einige der Vorteile der Verwendung von Flask-Login:
Erste Schritte
pip <span>install flask-login flask_sqlalchemy flask_bcrypt</span>Hier ist eine Aufschlüsselung dessen, was jede dieser Bibliotheken verwendet wird:
Sobald die Installation abgeschlossen ist, wird automatisch das Flask -Login in dem von Ihnen verwendeten Verzeichnis heruntergeladen.
Hinweis: Zum Zeitpunkt des Schreibens gibt es ein geringes Problem bei der Lösung der Abhängigkeiten in der neuesten Version von Flask und Werkzug. Um dies zu beheben, müssen Sie die Installation von Version 2.3.0 von Werkzug erzwingen, da dies die einzige bekannte Version ist, die gerade funktioniert.
Sobald Ihre Abhängigkeiten installiert wurden, müssen Sie sie mit Ihrer Flask -App initialisieren:
<span>from flask_sqlalchemy import SQLAlchemy </span> <span>from flask_login import UserMixin, LoginManager, login_user, logout_user, login_required </span> <span>from flask_bcrypt import Bcrypt </span> <span>from flask_login import LoginManager </span> app <span>= Flask(__name__) </span> login_manager <span>= LoginManager() </span> login_manager<span>.init_app(app) </span>
Im obigen Code -Snippet haben wir auch das LoginManager -Objekt in unserer Anwendung initialisiert. LoginManager ist eine Erweiterung des Flask-Logins, mit der die erforderlichen Konfigurationen für die Behandlung von Benutzersitzungen eingerichtet werden können.
Ein Modell ist eine Darstellung der Datenstruktur, die Sie in Ihrer Anwendung verwenden möchten. Es definiert, wie Daten im System organisiert, gespeichert und manipuliert werden. Modelle werden normalerweise mit einer Datenbank verwendet, die der vorher definierten Struktur folgt. Für unsere App haben wir folgende Daten:
pip <span>install flask-login flask_sqlalchemy flask_bcrypt</span>
Sie können Ihrem Benutzermodell auch zusätzliche Eigenschaften hinzufügen, z. B. eine E -Mail -Adresse oder ein Profilbild, abhängig vom Umfang Ihres Projekts.
Sobald Sie Ihr Benutzermodell definiert haben, müssen Sie eine Datenbank erstellen, die die im Vorgängermodell erstellte Datenstruktur speichert.
Für diesen Artikel werden wir eine SQLite -Datenbank verwenden. Dies liegt daran, dass SQLite eine leichte und serverlose Datenbank -Engine ist. Dies erleichtert die Einrichtung und Verwendung, da keine separate Installation erforderlich ist. Es ist auch eine gute Wahl für kleine bis mittelgroße Anwendungen.
Hier ist eine Aufschlüsselung der Schritte zur Verwendung einer SQLite -Datenbank in unserer Anwendung:
<span>from flask_sqlalchemy import SQLAlchemy </span> <span>from flask_login import UserMixin, LoginManager, login_user, logout_user, login_required </span> <span>from flask_bcrypt import Bcrypt </span> <span>from flask_login import LoginManager </span> app <span>= Flask(__name__) </span> login_manager <span>= LoginManager() </span> login_manager<span>.init_app(app) </span>
In diesem Snippet gibt der /// ... den relativen Pfad zu Ihrer Datei an - Site.db - der Name, den wir für unsere SQLite -Datenbankdatei verwendet haben. Dieser Name kann in alles geändert werden, was Sie bevorzugen.
<span>class User(UserMixin): </span> <span>id = db.Column(db.Integer, primary_key=True) </span>username <span>= db.Column(db.String(64), unique=True) </span>password_hash <span>= db.Column(db.String(128)) </span> <span>def __repr__(self): </span> <span>return <span>f'<User <span>{self.username}</span>>'</span></span>
sqlalchemy ist ein Objektrelations-Mapper, der eine Reihe von Tools für die Arbeit mit Datenbanken mit Python bietet. Die Zeile db = sqlalchemy (App) erstellt eine Instanz der SQLAlchemy -Klasse und bindet sie an Ihre Flask -Anwendung (App).
app<span>.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db' # Using SQLite as the database</span>
Dieser Code wird normalerweise am Ende Ihres Python -Skripts oder in einem separaten Skript platziert, das sich zur Initialisierung der Datenbank widmet. Sobald Sie Ihr Skript ausgeführt haben, wird die Datenbankdatei mit entsprechenden Tabellen erstellt, die auf den zuvor definierten Modellen basieren.
In diesem Fall erstellt der Code eine Site.db -Datei mit einer Benutzertabelle, wenn er noch nicht vorhanden ist. Die Datei site.db wird normalerweise in einem Ordner namens /Instanz /.
erhältlich
Als nächstes müssen wir einen user_loader erstellen, der eine Benutzer -ID nimmt und das entsprechende Benutzerobjekt zurückgibt. Hier ist ein Beispiel:
db <span>= SQLAlchemy(app)</span>
Passworthashing ist eine Sicherheitsmaßnahme, die die kryptografische Darstellung des Benutzerkennworts speichert, bevor es in einer Datenbank gespeichert wird. Auf diese Weise wird es schwieriger, das tatsächliche Passwort zu erhalten, selbst wenn die Sicherheit der Anwendung beeinträchtigt wurde.
Normalerweise wird das Kennwort zunächst im Registrierungsprozess gehasht und in einer Datenbank gespeichert. Jedes Mal, wenn sich ein Benutzer anmeldet, wird sein Passwort erneut gehasht und mit dem in der Datenbank gespeicherten Hashed -Passwort verglichen. Wenn die beiden Passwörter übereinstimmen, wird der Benutzer authentifiziert und erhält Zugriff auf die Anwendung.
Flask hat eine Erweiterung namens Flask-Bcrypt, die dazu beiträgt, diese Funktionalität zu erreichen. Es hat zwei Hauptfunktionen: generate_password_hash () und check_password_hash ().
theGenerate_password_hash () Die Funktion des Benutzers nimmt das Kennwort des Benutzers als Argument und gibt ein Hashed -Kennwort zurück. Dies wird normalerweise in der Registrierungslogik verwendet.
Die Funktion check_password_hash () nimmt ein Passwort und ein Hashed -Passwort als Argumente und gibt true zurück, wenn die beiden Passwörter übereinstimmen, oder falsch, wenn sie nicht übereinstimmen. Dies wird aufgerufen, bevor der Zugriff auf die Anmeldeansicht
Ansichten sind Teil des Flask -Frameworks, mit dem HTML, JSON oder andere Daten generiert werden, die an den Browser des Benutzers gesendet werden. In diesem Code -Snippet erstellen wir eine Ansicht, die die Eingabe des Benutzers akzeptiert und die Details zur Datenbank hinzufügt:
pip <span>install flask-login flask_sqlalchemy flask_bcrypt</span>
Hier ist eine Aufschlüsselung des Code:
<span>from flask_sqlalchemy import SQLAlchemy </span> <span>from flask_login import UserMixin, LoginManager, login_user, logout_user, login_required </span> <span>from flask_bcrypt import Bcrypt </span> <span>from flask_login import LoginManager </span> app <span>= Flask(__name__) </span> login_manager <span>= LoginManager() </span> login_manager<span>.init_app(app) </span>Als nächstes bestätigen wir, ob die Anforderungsmethode eine Post -Methode ist:
Sobald es bestätigt wurde, ruft die Funktion die vom Benutzer eingegebenen Werte in das Anmeldeformular ab:
<span>class User(UserMixin): </span> <span>id = db.Column(db.Integer, primary_key=True) </span>username <span>= db.Column(db.String(64), unique=True) </span>password_hash <span>= db.Column(db.String(128)) </span> <span>def __repr__(self): </span> <span>return <span>f'<User <span>{self.username}</span>>'</span></span>
In der Anmeldeansicht erstellen wir eine Logik, die Eingaben von einer Seite akzeptiert, und prüft dann, ob die Eingabe in der Datenbank mit einer Zeile übereinstimmt:
app<span>.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db' # Using SQLite as the database</span>
Hier ist eine Aufschlüsselung darüber, wie der Code funktioniert:
db <span>= SQLAlchemy(app)</span>Die Funktion Login () beginnt mit der Überprüfung, ob die Anforderungsmethode nach dem Postwerk ist:
Einmal wurde bestätigt, dass es sich um eine Postanforderung handelt. Es wird die vom Benutzer im Anmeldeformular eingegebenen Werte abgerufen:
pip <span>install flask-login flask_sqlalchemy flask_bcrypt</span>
<span>from flask_sqlalchemy import SQLAlchemy </span> <span>from flask_login import UserMixin, LoginManager, login_user, logout_user, login_required </span> <span>from flask_bcrypt import Bcrypt </span> <span>from flask_login import LoginManager </span> app <span>= Flask(__name__) </span> login_manager <span>= LoginManager() </span> login_manager<span>.init_app(app) </span>
<span>class User(UserMixin): </span> <span>id = db.Column(db.Integer, primary_key=True) </span>username <span>= db.Column(db.String(64), unique=True) </span>password_hash <span>= db.Column(db.String(128)) </span> <span>def __repr__(self): </span> <span>return <span>f'<User <span>{self.username}</span>>'</span></span>
app<span>.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db' # Using SQLite as the database</span>
im Wesentlichen prüft es, ob die eingegebenen Anmeldeinformationen gültig sind, sich in den Benutzer angemeldet und bei Erfolg auf die Begrüßungsseite umgeleitet. Wenn die Anmelde nicht erfolgreich ist oder eine Get -Anfrage ist, wird die Anmeldevorlage für den Benutzer zur Eingabe seiner Anmeldeinformationen rendert.
In den meisten Anwendungen sind einige Seiten nicht zugegriffen, wenn der Benutzer nicht angemeldet ist. Dies umfasst Seiten wie Transaktionsverlauf, Entwürfe und Abmeldeseiten. Flask-Login bietet eine bequeme Möglichkeit, diese Seiten/Routen zu schützen und den Zugriff auf authentifizierte Benutzer mit dem Dekorator Login_Required einzuschränken. Hier ist eine Aufschlüsselung der Funktionsweise.
Um diese Funktionalität zu nutzen, müssen Sie den Dekorator Login_Required aus Flask-Login importieren:
db <span>= SQLAlchemy(app)</span>
Als nächstes müssen Sie den Dekorateur Login_Required zu einer beliebigen Route hinzufügen, die Sie schützen möchten. Lassen Sie uns beispielsweise eine Abmeldeseite erstellen, auf die nur zugegriffen werden kann, wenn der Benutzer angemeldet ist:
<span>if __name__ == '__main__': </span> db<span>.create_all() </span> app<span>.run(debug=True)</span>
Hier ist eine Aufschlüsselung der Funktionsweise:
Hinzufügen von Vorlagen
Sie können den vollständigen Code für dieses Tutorial sehen und mehr über seine Implementierung in der Github -Repository dieses Artikels erfahren.
Eine Benutzersitzung ist ein System, mit dem Benutzerinformationen verfolgt und aktualisiert werden, während der Benutzer angemeldet ist. Flask-Login verwaltet diese Sitzungen, indem ein Sitzungs-Cookie im Browser des Benutzers gespeichert wird. Das Session Cookie ist ein kleines Datenstück, das eine eindeutige Kennung für die Sitzung des Benutzers enthält.
Wenn sich ein Benutzer über Flask-Login auf einer Website anmeldet, generiert der Server ein Sitzungs-Cookie und sendet es an den Browser des Benutzers. Der Browser speichert das Session Cookie und enthält es in alle Anforderungen an den Server. Der Server verwendet das Sitzungs -Cookie, um den Benutzer und seinen Sitzungsstatus zu identifizieren.
Wenn der Benutzer beispielsweise angemeldet ist und eine von Flask-Login geschützte Seite besucht, überprüfen Flask-Login das Sitzungs-Cookie, um festzustellen, ob der Benutzer authentifiziert ist. Wenn der Benutzer authentifiziert ist, lädt Flask-Login die Profilinformationen des Benutzers aus der Datenbank und stellt sie der Ansicht zur Verfügung. Wenn der Benutzer nicht authentifiziert ist, leitet Flask-Login den Benutzer zur Anmeldeseite um.
Wenn sich der Benutzer aus der Website abmeldet, löscht der Server das Sitzungs -Cookie aus dem Browser des Benutzers, der die Benutzersitzung beendet.
Flask bietet eine Vielzahl von Funktionen, die verschiedene Aspekte der Authentifizierung ansprechen, die von der Verwaltung der Benutzersitzung bis zur Autorisierung reichen. Durch die Verwendung dieser Funktionen können Sie ein robustes und sicheres Authentifizierungssystem implementieren, das auf die spezifischen Anforderungen Ihrer Anwendung zugeschnitten ist.
Das obige ist der detaillierte Inhalt vonSo führen Sie die Benutzerauthentifizierung mit Flask-Login durch. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!