Sie können Ihren Nutzern die Authentifizierung bei Firebase mithilfe von OAuth-Anbietern wie Yahoo durch Integrieren 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-Konsole den Abschnitt Auth.
- Aktivieren Sie auf dem Tab Anmeldemethode den Yahoo!-Anbieter.
- Fügen Sie die Client-ID und den Clientschlüssel aus der Entwicklerkonsole dieses Anbieters hinzu.
Anbieterkonfiguration:
-
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 aus:
profile
undemail
. - Wenn Sie Apps bei diesen Anbietern registrieren, müssen Sie die
*.firebaseapp.com
-Domain für Ihr Projekt als Weiterleitungsdomain für Ihre App registrieren.
-
- 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 verwalten Sie den Anmeldevorgang mit dem Firebase JavaScript SDK:
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 im Yahoo! OAuth-Dokumentation Beachten Sie, dass Sie keine für Firebase erforderlichen Parameter mit
setCustomParameters()
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 Ihr Anwendung Zugriff auf private Nutzerdaten von Yahoo-APIs benötigt, können Sie müssen Sie Berechtigungen für Yahoo! APIs unter API Permissions (API-Berechtigungen) im Yahoo!-Entwicklerkonsole Die angeforderten OAuth-Bereiche müssen genau mit dem vorkonfigurierten Berechtigungen in den API-Berechtigungen der App. Wenn beispielsweise Lese-/Schreibzugriff auf die Kontakte des Nutzers angefordert und in den API-Berechtigungen der App vorkonfiguriert wird, musssdct-w
anstelle des OAuth-Bereichs „Lesezugriff“sdct-r
übergeben werden. 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 im Dokumentation zu den Yahoo-Bereichen
Authentifizieren Sie sich bei Firebase mithilfe des OAuth-Anbieterobjekts. Sie können Ihre Nutzer können sich mit ihrem Yahoo-Konto anmelden, indem sie entweder ein Pop-up-Fenster öffnen oder zur Anmeldeseite weitergeleitet werden. Die Weiterleitungsmethode ist 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. });
Wenn Sie sich durch Weiterleitung zur Anmeldeseite anmelden möchten, rufen Sie
signInWithRedirect
auf:
firebase.auth().signInWithRedirect(provider);
Nachdem der Nutzer sich angemeldet und auf die Seite zurückgekehrt ist, können Sie Folgendes abrufen: das Anmeldeergebnis durch Aufrufen von
getRedirectResult
.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 können aus dem
firebase.auth.UserCredential
abgerufen werden. zurückgegeben.Mit dem OAuth-Zugriffstoken können Sie die Methode Yahoo! API
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 aus dem Feldfirebase.auth().currentUser.providerData[0].uid
oder ausresult.additionalUserInfo.profile
abgerufen werden kann.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 mit demselben Nutzer verknüpft, damit sie sich 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 App für eine Chrome-Erweiterung erstellen, lesen Sie die Leitfaden zu nicht sichtbaren Dokumenten.
Nächste Schritte
Nachdem sich ein Nutzer zum ersten Mal angemeldet hat, wird ein neues Nutzerkonto erstellt und die mit den Anmeldedaten verknüpft sind, d. h. Nutzername und Passwort, oder Authentifizierungsanbieter-Informationen – also für den Nutzer, mit dem sich der Nutzer angemeldet hat. Diese neue -Konto wird als Teil Ihres Firebase-Projekts gespeichert und kann verwendet werden, um in jeder App in Ihrem Projekt einen Nutzer erreichen, 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.
Rufen Sie auf, um einen Nutzer abzumelden.
signOut
:
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. });