In dieser Anleitung wird gezeigt, wie Sie Nutzeranmeldedaten mit Firebase Authentication, der App Engine-Standardumgebung und Datastore abrufen, prüfen und speichern.
Dazu werden Sie Schritt für Schritt durch eine einfache Anwendung für Notizen namens Firenotes geführt, die die Notizen von Nutzern in deren eigenen privaten Notizbüchern speichert. Die Notizbücher werden pro Nutzer gespeichert und durch die eindeutige Firebase-Authentifizierungs-ID jedes Nutzers identifiziert. Die Anwendung beinhaltet diese Komponenten:
Das Frontend konfiguriert die Benutzeroberfläche für die Anmeldung und ruft die Firebase-Authentifizierungs-ID ab. Außerdem verarbeitet es Änderungen am Authentifizierungsstatus und ermöglicht Nutzern, ihre Notizen anzusehen.
FirebaseUI ist eine Open-Source-Drop-in-Lösung, die Authentifizierungs- und UI-Aufgaben vereinfacht. Das SDK verarbeitet unter anderem die Nutzeranmeldung, das Verknüpfen von mehreren Anbietern mit einem einzigen Konto und das Wiederherstellen von Passwörtern. Die Lösung implementiert Best Practices für die Authentifizierung, um für eine reibungslose und sichere Anmeldung zu sorgen.
Das Backend überprüft den Authentifizierungsstatus des Nutzers und gibt Nutzerprofilinformationen sowie die Notizen des Nutzers zurück.
Die Anwendung speichert die Nutzeranmeldedaten mithilfe der NDB-Clientbibliothek in Datastore. Sie können die Anmeldedaten aber auch in einer Datenbank Ihrer Wahl speichern.
Im folgenden Diagramm wird gezeigt, wie das Frontend und Backend miteinander kommunizieren und Nutzeranmeldedaten von Firebase an die Datenbank übertragen werden.Firenotes basiert auf dem Framework für Flask-Webanwendungen. Die Beispielanwendung verwendet Flask der Einfachheit und Benutzerfreundlichkeit wegen, die untersuchten Konzepte und Technologien gelten aber unabhängig von dem verwendeten Framework.
Ziele
In dieser Anleitung lernen Sie Folgendes:
- Firebase-Benutzeroberfläche für die Authentifizierung konfigurieren
- Firebase-ID-Token abrufen und mit der serverseitigen Authentifizierung überprüfen
- Anmeldedaten und verknüpfte Daten in Cloud Datastore speichern
- Datenbank mit der NDB-Clientbibliothek abfragen
- Anwendung in App Engine bereitstellen
Kosten
In dieser Anleitung werden kostenpflichtige Komponenten von Google Cloud verwendet, darunter:
- Datastore
Sie können mithilfe des Preisrechners eine Kostenschätzung für Ihre voraussichtliche Nutzung erstellen.
Hinweis
- Installieren Sie Git, Python 2.7 und virtualenv. Weitere Informationen zum Einrichten Ihrer Python-Entwicklungsumgebung für Google Cloud, beispielsweise zum Installieren der neuesten Version von Python, finden Sie unter Python-Entwicklungsumgebung einrichten.
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
Wenn Sie das SDK bereits in einem anderen Projekt installiert und initialisiert haben, legen Sie das gcloud
-Projekt auf die App Engine-Projekt-ID fest, die Sie für Firenotes verwenden. Weitere Informationen zu bestimmten Befehlen zum Aktualisieren eines Projekts mit dem gcloud
-Tool finden Sie unter Google Cloud SDK-Konfigurationen verwalten.
Beispiel-App klonen
So laden Sie das Beispiel auf Ihren lokalen Computer herunter:
Klonen Sie das Beispielanwendungs-Repository auf Ihren lokalen Rechner:
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
Sie können auch das Beispiel als ZIP-Datei herunterladen und extrahieren.
Wechseln Sie in das Verzeichnis mit dem Beispielcode:
So konfigurieren Sie FirebaseUI und wählen Identitätsanbieter aus:cd python-docs-samples/appengine/standard/firebase/firenotes
Zum Einbinden von Firebase in Ihre Anwendung gehen Sie so vor:
- Erstellen Sie ein Firebase-Projekt in der Firebase Console.
- Wenn Sie noch kein Firebase-Projekt haben, klicken Sie auf Projekt hinzufügen und geben Sie entweder einen vorhandenen Google Cloud-Projektnamen oder einen neuen Projektnamen ein.
- Wenn Sie ein vorhandenes Firebase-Projekt verwenden möchten, wählen Sie dieses Projekt in der Console aus.
- Klicken Sie auf der Übersichtsseite zum Projekt auf Firebase zu meiner Web-App hinzufügen. Wenn das Projekt bereits eine Anwendung enthält, wählen Sie auf der Übersichtsseite zum Projekt die Option App hinzufügen aus.
Verwenden Sie den Abschnitt
Initialize Firebase
aus dem benutzerdefinierten Code-Snippet Ihres Projekts, um den folgenden Abschnitt der Dateifrontend/main.js
auszufüllen:
- Erstellen Sie ein Firebase-Projekt in der Firebase Console.
Konfigurieren Sie in der Datei
frontend/main.js
das FirebaseUI-Anmelde-Widget. Wählen Sie dazu die Anbieter aus, die Sie Ihren Nutzern zur Verfügung stellen möchten.Aktivieren Sie die ausgewählten Anbieter, die in der Firebase Console erhalten bleiben sollen. Klicken Sie dazu auf Authentifizierung > Anmeldemethode. Bewegen Sie dann unter Anbieter für Anmeldungen den Mauszeiger auf einen Anbieter und klicken Sie auf das Stiftsymbol.
Schalten Sie auf Aktivieren um und geben Sie für andere Identitätsanbieter die Anbieter-ID und das Secret von der Entwicklerwebsite des Anbieters ein. Die Firebase-Dokumentation enthält spezifische Anleitungen in den "Vorbereitung"-Abschnitten der Leitfäden für Facebook, Twitter und GitHub. Nachdem Sie einen Anbieter aktiviert haben, klicken Sie auf Speichern.
Klicken Sie in der Firebase Console unter Authorized Domains (Autorisierte Domains) auf Add Domain (Domain hinzufügen) und geben Sie die Domain Ihrer Anwendung in App Engine in diesem Format ein:
[PROJECT_ID].appspot.com
Fügen Sie nicht
http://
vor dem Domainnamen ein.
Abhängigkeiten installieren
Wechseln Sie in das Verzeichnis
backend
und schließen Sie die Anwendungseinrichtung ab:cd backend/
Installieren Sie die Abhängigkeiten in einem
lib
-Verzeichnis im Projekt:pip install -t lib -r requirements.txt
In
appengine_config.py
registriert die Methodevendor.add()
die Bibliotheken im Verzeichnislib
.
Anwendung lokal ausführen
Wenn Sie die Anwendung lokal ausführen möchten, verwenden Sie den lokalen App Engine-Entwicklungsserver:
Fügen Sie der Datei die folgende URL als
backendHostURL
inmain.js
hinzu:http://localhost:8081
Rufen Sie das Stammverzeichnis der Anwendung auf und starten Sie dann den Entwicklungsserver:
dev_appserver.py frontend/app.yaml backend/app.yaml
Rufen Sie in einem Webbrowser http://localhost:8080/ auf.
Nutzer auf dem Server authentifizieren
Nachdem Sie ein Projekt eingerichtet und eine Anwendung für die Entwicklung initialisiert haben, können Sie den Code durchgehen, um zu erfahren, wie Firebase-ID-Tokens auf dem Server abgerufen und überprüft werden.
ID-Token von Firebase abrufen
Der erste Schritt der serverseitigen Authentifizierung besteht im Abrufen eines Zugriffstokens für die Überprüfung. Authentifizierungsanfragen werden mit dem Listener onAuthStateChanged()
von Firebase verarbeitet:
Wenn ein Nutzer angemeldet ist, gibt die Firebase-Methode getToken()
im Callback ein Firebase-ID-Token in Form eines JWT (JSON Web Tokens) zurück.
Tokens auf dem Server prüfen
Nachdem sich ein Nutzer angemeldet hat, ruft der Frontend-Dienst alle vorhandenen Notizen im Notizbuch des Nutzers durch eine AJAX-GET
-Anfrage ab. Dafür ist eine Autorisierung für den Zugriff auf die Daten des Nutzers erforderlich, sodass das JWT im Authorization
-Header der Anfrage mithilfe des Schemas Bearer
gesendet wird:
Bevor der Client auf Serverdaten zugreifen kann, muss von Ihrem Server geprüft werden, ob das Token von Firebase signiert ist. Sie können das Token mit der Google-Authentifizierungsbibliothek für Python überprüfen.
Verwenden Sie die Funktion verify_firebase_token
der Authentifizierungsbibliothek, um das Inhabertoken zu prüfen und die Anforderungen zu extrahieren:
Jeder Identitätsanbieter sendet einen anderen Satz von Anforderungen. Jeder hat aber zumindest eine sub
-Anforderung mit einer eindeutigen Nutzer-ID und eine Anforderung, über die einige Profilinformationen bereitgestellt werden, beispielsweise name
oder email
. Damit können Sie Ihre Anwendung für die einzelnen Nutzer personalisieren.
Nutzerdaten in Datastore verwalten
Nach der Authentifizierung eines Nutzers müssen Sie seine Daten speichern, damit sie nach dem Ende einer angemeldeten Sitzung erhalten bleiben. In den folgenden Abschnitten wird erläutert, wie Sie eine Notiz als Datastore-Entität speichern und Entitäten nach Nutzer-ID trennen.
Entitäten zum Speichern von Nutzerdaten erstellen
Sie können in Datastore eine Entität erstellen. Dazu deklarieren Sie eine NDB-Modellklasse mit bestimmten Attributen wie Ganzzahlen oder Strings. Datastore indexiert Entitäten nach der Art. In Firenotes ist die Art jeder Entität Note
.
Zum Zweck der Abfrage wird jede Note
mit einem Schlüsselnamen gespeichert. Dies ist die Nutzer-ID, die im vorherigen Abschnitt aus der sub
-Anforderung abgerufen wurde.
Der folgende Code zeigt, wie Attribute einer Entität festgelegt werden – sowohl mit der Konstruktormethode für die Modellklasse, wenn die Entität erstellt wird, als auch durch die Zuweisung einzelner Attribute nach der Erstellung:
Damit Sie die neu erstellte Note
in Datastore schreiben können, rufen Sie die Methode put()
für das Objekt note
auf.
Nutzerdaten abrufen
Wenn Sie Nutzerdaten abrufen möchten, die mit einer bestimmten Nutzer-ID verknüpft sind, verwenden Sie die NDB-Methode query()
, um in der Datenbank nach Notizen in derselben Entitätengruppe zu suchen.
Entitäten in derselben Gruppe oder im selben Ancestor-Pfad verwenden einen gemeinsamen Schlüsselnamen. In diesem Fall ist dies die Nutzer-ID.
Anschließend können Sie die Abfragedaten abrufen und die Notizen im Client ansehen:
Anwendung bereitstellen
Sie haben Firebase Authentication erfolgreich in Ihre App Engine-Anwendung eingebunden. So sehen Sie, wie Ihre Anwendung in einer Live-Produktionsumgebung ausgeführt wird:
- Ändern Sie die Backend-Host-URL in
main.js
zuhttps://backend-dot-[PROJECT_ID].appspot.com
. Ersetzen Sie[PROJECT_ID]
durch Ihre Projekt-ID. Stellen Sie die Anwendung mit der Google Cloud SDK-Befehlszeile bereit:
gcloud app deploy backend/index.yaml frontend/app.yaml backend/app.yaml
Sehen Sie sich die Anwendung live unter
https://[PROJECT_ID].appspot.com
an.
Bereinigen
Löschen Sie Ihr App Engine-Projekt, damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden.
Projekt löschen
Am einfachsten vermeiden Sie weitere Kosten, wenn Sie das zum Ausführen der Anleitung erstellte Projekt löschen.
So löschen Sie das Projekt:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Nächste Schritte
- Referenzarchitekturen, Diagramme und Best Practices zu Google Cloud kennenlernen. Weitere Informationen zu Cloud Architecture Center