Sie können Ihren Nutzern die Authentifizierung bei Firebase mithilfe von OAuth-Anbietern wie Yahoo durch Integration des generischen OAuth-Logins in Ihre App mithilfe des Firebase SDK den gesamten Anmeldevorgang ausführen.
Hinweis
Wenn Sie Nutzer mit Yahoo!-Konten anmelden möchten, müssen Sie zuerst Yahoo für die Anmeldung aktivieren für Ihr Firebase-Projekt erstellen:
- Fügen Sie Ihrem JavaScript-Projekt Firebase hinzu.
- Öffnen Sie in der Firebase Console den Bereich Auth.
- Aktivieren Sie auf dem Tab Anmeldemethode den Yahoo!-Anbieter.
- Fügen Sie die Client-ID und das Client-Secret aus der Entwicklerkonsole des Anbieters zur Anbieterkonfiguration hinzu:
-
Um einen Yahoo-OAuth-Client zu registrieren, folgen Sie dem Yahoo-Entwickler Dokumentation zu Registrierung einer Webanwendung bei Yahoo.
Wählen Sie die beiden OpenID Connect API-Berechtigungen
profile
undemail
aus. - Achten Sie bei der Registrierung von Apps bei diesen Anbietern darauf, die
*.firebaseapp.com
-Domain für Ihr Projekt als Weiterleitungsdomain für Ihr
-
- Klicken Sie auf Speichern.
Anmeldevorgang mit dem Firebase SDK abwickeln
Wenn Sie eine Webanwendung erstellen, ist es am einfachsten, Ihre Nutzer mit Firebase übernimmt die gesamte Anmeldung über die Yahoo-Konten. mit dem Firebase JavaScript SDK.
So führen Sie den Anmeldevorgang mit dem Firebase JavaScript SDK aus:
Instanz eines OAuthProviders mithilfe der Anbieter-ID erstellen yahoo.com
Web
import { OAuthProvider } from "firebase/auth"; const provider = new OAuthProvider('yahoo.com');
Web
var provider = new firebase.auth.OAuthProvider('yahoo.com');
Optional: Geben Sie zusätzliche benutzerdefinierte OAuth-Parameter an, die Sie mit der OAuth-Anfrage senden.
Web
provider.setCustomParameters({ // Prompt user to re-authenticate to Yahoo. prompt: 'login', // Localize to French. language: 'fr' });
Web
provider.setCustomParameters({ // Prompt user to re-authenticate to Yahoo. prompt: 'login', // Localize to French. language: 'fr' });
Informationen zu den von Yahoo unterstützten Parametern finden Sie in der Yahoo OAuth-Dokumentation. Hinweis: Sie können keine für Firebase erforderlichen Parameter mit
setCustomParameters()
übergeben. Diese Parameter sind client_id, redirect_uri, response_type, scope und state.Optional: Geben Sie neben
profile
und weiteren OAuth 2.0-Bereichen weitere OAuth 2.0-Bereiche an.email
, die Sie vom Authentifizierungsanbieter anfordern möchten. Wenn Ihre Anwendung Zugriff auf private Nutzerdaten von Yahoo APIs benötigt, müssen Sie in der Yahoo Developer Console unter API-Berechtigungen Berechtigungen für Yahoo APIs anfordern. Die angeforderten OAuth-Bereiche müssen genau mit dem vorkonfigurierten Berechtigungen in den API-Berechtigungen der App. Wenn beispielsweise Der Zugriff wird an die Kontakte der Nutzer angefordert und in der API der App vorkonfiguriert. Berechtigungen, musssdct-w
anstelle des schreibgeschützten OAuth-Bereichs übergeben werdensdct-r
. Andernfalls schlägt der Ablauf fehl und der Endanwendenden.Web
// Request access to Yahoo Mail API. provider.addScope('mail-r'); // Request read/write access to user contacts. // This must be preconfigured in the app's API permissions. provider.addScope('sdct-w');
Web
// Request access to Yahoo Mail API. provider.addScope('mail-r'); // Request read/write access to user contacts. // This must be preconfigured in the app's API permissions. provider.addScope('sdct-w');
Weitere Informationen finden Sie in der Dokumentation zu Yahoo-Bereichen.
Authentifizieren Sie sich bei Firebase mithilfe des OAuth-Anbieterobjekts. Du kannst Nutzer auffordern, sich mit ihren Yahoo-Konten anzumelden. Dazu kannst du ein Pop-up-Fenster öffnen oder zur Anmeldeseite weiterleiten. Die Weiterleitungsmethode wird auf Mobilgeräten bevorzugt.
Rufe
signInWithPopup
auf, um dich über ein Pop-up-Fenster anzumelden:Web
import { getAuth, signInWithPopup, OAuthProvider } from "firebase/auth"; const auth = getAuth(); signInWithPopup(auth, provider) .then((result) => { // IdP data available in result.additionalUserInfo.profile // ... // Yahoo OAuth access token and ID token can be retrieved by calling: const credential = OAuthProvider.credentialFromResult(result); const accessToken = credential.accessToken; const idToken = credential.idToken; }) .catch((error) => { // Handle error. });
Web
firebase.auth().signInWithPopup(provider) .then((result) => { // IdP data available in result.additionalUserInfo.profile // ... /** @type {firebase.auth.OAuthCredential} */ const credential = result.credential; // Yahoo OAuth access token and ID token can be retrieved by calling: var accessToken = credential.accessToken; var idToken = credential.idToken; }) .catch((error) => { // Handle error. });
Rufen Sie
signInWithRedirect
auf, um sich anzumelden und zur Anmeldeseite weitergeleitet zu werden:
firebase.auth().signInWithRedirect(provider);
Nachdem der Nutzer die Anmeldung abgeschlossen und zur Seite zurückgekehrt ist, können Sie das Anmeldeergebnis durch Aufrufen von
getRedirectResult
abrufen.Web
import { getAuth, signInWithRedirect } from "firebase/auth"; const auth = getAuth(); signInWithRedirect(auth, provider);
Web
firebase.auth().signInWithRedirect(provider);
Nach erfolgreichem Abschluss werden das zugehörige OAuth-ID-Token und das Zugriffstoken mit dem Anbieter kann aus dem
firebase.auth.UserCredential
abgerufen werden. zurückgegeben.Mit dem OAuth-Zugriffstoken kannst du die Yahoo API aufrufen.
Um beispielsweise die grundlegenden Profilinformationen abzurufen, verwendet die folgende REST API kann folgendermaßen aufgerufen werden:
curl -i -H "Authorization: Bearer ACCESS_TOKEN" https://social.yahooapis.com/v1/user/YAHOO_USER_UID/profile?format=json
Dabei ist
YAHOO_USER_UID
die ID des Yahoo-Nutzers, die über das Feldfirebase.auth().currentUser.providerData[0].uid
oder ausresult.additionalUserInfo.profile
Die obigen Beispiele konzentrieren sich zwar auf Anmeldeabläufe, Sie haben aber auch die Möglichkeit, einen Yahoo-Anbieter mithilfe von
linkWithPopup
/linkWithRedirect
. Sie können beispielsweise mehrere demselben Nutzer zu, damit sie sich mit beiden anmelden können.Web
import { getAuth, linkWithPopup, OAuthProvider } from "firebase/auth"; const provider = new OAuthProvider('yahoo.com'); const auth = getAuth(); linkWithPopup(auth.currentUser, provider) .then((result) => { // Yahoo credential is linked to the current user. // IdP data available in result.additionalUserInfo.profile. // Get the OAuth access token and ID Token const credential = OAuthProvider.credentialFromResult(result); const accessToken = credential.accessToken; const idToken = credential.idToken; }) .catch((error) => { // Handle error. });
Web
var provider = new firebase.auth.OAuthProvider('yahoo.com'); firebase.auth().currentUser.linkWithPopup(provider) .then((result) => { // Yahoo credential is linked to the current user. // IdP data available in result.additionalUserInfo.profile. // Yahoo OAuth access token can be retrieved by calling: // result.credential.accessToken // Yahoo OAuth ID token can be retrieved by calling: // result.credential.idToken }) .catch((error) => { // Handle error. });
Dasselbe Muster kann mit
reauthenticateWithPopup
/reauthenticateWithRedirect
verwendet werden, um aktuelle Anmeldedaten für sensible Vorgänge abzurufen, für die eine aktuelle Anmeldung erforderlich ist.Web
import { getAuth, reauthenticateWithPopup, OAuthProvider } from "firebase/auth"; const provider = new OAuthProvider('yahoo.com'); const auth = getAuth(); reauthenticateWithPopup(auth.currentUser, provider) .then((result) => { // User is re-authenticated with fresh tokens minted and // should be able to perform sensitive operations like account // deletion and email or password update. // IdP data available in result.additionalUserInfo.profile. // Get the OAuth access token and ID Token const credential = OAuthProvider.credentialFromResult(result); const accessToken = credential.accessToken; const idToken = credential.idToken; }) .catch((error) => { // Handle error. });
Web
var provider = new firebase.auth.OAuthProvider('yahoo.com'); firebase.auth().currentUser.reauthenticateWithPopup(provider) .then((result) => { // User is re-authenticated with fresh tokens minted and // should be able to perform sensitive operations like account // deletion and email or password update. // IdP data available in result.additionalUserInfo.profile. // Yahoo OAuth access token can be retrieved by calling: // result.credential.accessToken // Yahoo OAuth ID token can be retrieved by calling: // result.credential.idToken }) .catch((error) => { // Handle error. });
Mit Firebase in einer Chrome-Erweiterung authentifizieren
Wenn Sie eine Chrome-Erweiterung entwickeln, lesen Sie den Leitfaden zu Offscreen-Dokumenten.
Nächste Schritte
Nachdem sich ein Nutzer zum ersten Mal angemeldet hat, wird ein neues Nutzerkonto erstellt und mit den Anmeldedaten verknüpft, d. h. mit dem Nutzernamen und Passwort, der Telefonnummer oder den Informationen zum Authentifizierungsanbieter, mit denen sich der Nutzer angemeldet hat. Dieses neue Konto wird als Teil Ihres Firebase-Projekts gespeichert und kann verwendet werden, um einen Nutzer in allen Apps in Ihrem Projekt zu identifizieren, unabhängig davon, wie er sich anmeldet.
-
Um den Authentifizierungsstatus Ihrer Nutzer in Ihren Apps zu ermitteln, gehen Sie folgendermaßen vor: einen Beobachter für das
Auth
-Objekt festlegen. Die grundlegenden Profilinformationen des Nutzers können Sie dann aus demUser
-Objekt abrufen. Weitere Informationen finden Sie unter Nutzer verwalten. In Firebase Realtime Database und Cloud Storage Sicherheitsregeln können Sie die eindeutige Nutzer-ID des angemeldeten Nutzers aus der Variablen
auth
abrufen, und steuern, auf welche Daten ein Nutzer zugreifen kann.
Sie können Nutzern erlauben, sich mit Mehrfachauthentifizierung in Ihrer App anzumelden indem Sie die Anmeldedaten des Authentifizierungsanbieters mit einem eines bestehenden Nutzerkontos.
Wenn Sie einen Nutzer abmelden möchten, rufen Sie signOut
auf:
Web
import { getAuth, signOut } from "firebase/auth"; const auth = getAuth(); signOut(auth).then(() => { // Sign-out successful. }).catch((error) => { // An error happened. });
Web
firebase.auth().signOut().then(() => { // Sign-out successful. }).catch((error) => { // An error happened. });