Sie können Nutzern die Authentifizierung mit Firebase über ihre GitHub-Konten ermöglichen, indem Sie die GitHub-Authentifizierung in Ihre App einbinden. Sie können die GitHub-Authentifizierung entweder über das Firebase SDK oder manuell über den GitHub-OAuth 2.0-Vorgang einbinden und das resultierende Zugriffstoken an Firebase übergeben.
Hinweis
- Firebase zu Ihrem JavaScript-Projekt hinzufügen
- Wechseln Sie in der Firebase-Konsole zu Sicherheit > Authentifizierung.
- Aktivieren Sie auf dem Tab Anmeldemethode den Anmeldeanbieter GitHub.
-
Fügen Sie der Anbieterkonfiguration die Client-ID und den Clientschlüssel aus der Entwicklerkonsole des Anbieters hinzu:
- Registrieren Sie Ihre App als Entwickleranwendung auf GitHub und rufen Sie die OAuth 2.0-Client-ID und den Clientschlüssel Ihrer App ab.
-
Achten Sie darauf, dass der OAuth-Weiterleitungs-URI von Firebase (z. B.
my-app-12345.firebaseapp.com/__/auth/handler) als Callback-URL für die Autorisierung auf der Einstellungsseite Ihrer App in der Konfiguration Ihrer GitHub-App festgelegt ist.
- Klicken Sie auf Speichern.
Anmeldevorgang mit dem Firebase SDK verarbeiten
Wenn Sie eine Web-App entwickeln, ist die einfachste Möglichkeit, Ihre Nutzer mit Firebase über ihre GitHub-Konten zu authentifizieren, den Anmeldevorgang mit dem Firebase JavaScript SDK zu verarbeiten. Wenn Sie einen Nutzer in Node.js oder einer anderen Umgebung ohne Browser authentifizieren möchten, müssen Sie den Anmeldevorgang manuell durchführen.
So verarbeiten Sie den Anmeldevorgang mit dem Firebase JavaScript SDK:
- Erstellen Sie eine Instanz des GitHub-Anbieter-Objekts:
Web
import { GithubAuthProvider } from "firebase/auth"; const provider = new GithubAuthProvider();
Web
var provider = new firebase.auth.GithubAuthProvider();
- Optional: Geben Sie zusätzliche OAuth 2.0-Bereiche an, die Sie vom Authentifizierungsanbieter anfordern möchten. Rufen Sie
addScopeauf, um einen Bereich hinzuzufügen. Beispiel:Weitere Informationen finden Sie in der Dokumentation zum Authentifizierungsanbieter.Web
provider.addScope('repo');
Web
provider.addScope('repo');
- Optional: Geben Sie zusätzliche benutzerdefinierte OAuth-Anbieterparameter an, die mit der OAuth-Anfrage gesendet werden sollen. Wenn Sie einen benutzerdefinierten Parameter hinzufügen möchten, rufen Sie
setCustomParametersfür den initialisierten Anbieter mit einem Objekt auf, das den Schlüssel (wie in der Dokumentation des OAuth-Anbieters angegeben) und den entsprechenden Wert enthält. Beispiel:Reservierte erforderliche OAuth-Parameter sind nicht zulässig und werden ignoriert. Weitere Informationen finden Sie in der Referenz zum Authentifizierungsanbieter.Web
provider.setCustomParameters({ 'allow_signup': 'false' });
Web
provider.setCustomParameters({ 'allow_signup': 'false' });
- Authentifizieren Sie sich mit Firebase über das GitHub-Anbieterobjekt. Sie können Ihre Nutzer auffordern, sich mit ihren GitHub-Konten anzumelden, indem Sie entweder ein Pop-up-Fenster öffnen oder zur Anmeldeseite weiterleiten. Die Weiterleitungsmethode wird auf Mobilgeräten bevorzugt.
- Wenn Sie sich mit einem Pop-up-Fenster anmelden möchten, rufen Sie
signInWithPopupauf:Sie können auch das OAuth-Token des GitHub-Anbieters abrufen, mit dem zusätzliche Daten über die GitHub-APIs abgerufen werden können.Web
import { getAuth, signInWithPopup, GithubAuthProvider } from "firebase/auth"; const auth = getAuth(); signInWithPopup(auth, provider) .then((result) => { // This gives you a GitHub Access Token. You can use it to access the GitHub API. const credential = GithubAuthProvider.credentialFromResult(result); const token = credential.accessToken; // The signed-in user info. const user = result.user; // IdP data available using getAdditionalUserInfo(result) // ... }).catch((error) => { // Handle Errors here. const errorCode = error.code; const errorMessage = error.message; // The email of the user's account used. const email = error.customData.email; // The AuthCredential type that was used. const credential = GithubAuthProvider.credentialFromError(error); // ... });
Web
firebase .auth() .signInWithPopup(provider) .then((result) => { /** @type {firebase.auth.OAuthCredential} */ var credential = result.credential; // This gives you a GitHub Access Token. You can use it to access the GitHub API. var token = credential.accessToken; // The signed-in user info. var user = result.user; // IdP data available in result.additionalUserInfo.profile. // ... }).catch((error) => { // Handle Errors here. var errorCode = error.code; var errorMessage = error.message; // The email of the user's account used. var email = error.email; // The firebase.auth.AuthCredential type that was used. var credential = error.credential; // ... });
Hier können Sie auch Fehler abfangen und behandeln. Eine Liste der Fehlercodes finden Sie in der Auth-Referenzdokumentation.
- Wenn Sie sich anmelden möchten, indem Sie zur Anmeldeseite weitergeleitet werden, rufen Sie
signInWithRedirectauf: Halten Sie sich bei der Verwendung von `signInWithRedirect` an die Best Practices.Anschließend können Sie das OAuth-Token des GitHub-Anbieters abrufen, indem Sie beim Laden Ihrer SeiteWeb
import { getAuth, signInWithRedirect } from "firebase/auth"; const auth = getAuth(); signInWithRedirect(auth, provider);
Web
firebase.auth().signInWithRedirect(provider);
getRedirectResultaufrufen:Hier können Sie auch Fehler abfangen und behandeln. Eine Liste der Fehlercodes finden Sie in der Auth-Referenzdokumentation.Web
import { getAuth, getRedirectResult, GithubAuthProvider } from "firebase/auth"; const auth = getAuth(); getRedirectResult(auth) .then((result) => { const credential = GithubAuthProvider.credentialFromResult(result); if (credential) { // This gives you a GitHub Access Token. You can use it to access the GitHub API. const token = credential.accessToken; // ... } // The signed-in user info. const user = result.user; // IdP data available using getAdditionalUserInfo(result) // ... }).catch((error) => { // Handle Errors here. const errorCode = error.code; const errorMessage = error.message; // The email of the user's account used. const email = error.customData.email; // The AuthCredential type that was used. const credential = GithubAuthProvider.credentialFromError(error); // ... });
Web
firebase.auth() .getRedirectResult() .then((result) => { if (result.credential) { /** @type {firebase.auth.OAuthCredential} */ var credential = result.credential; // This gives you a GitHub Access Token. You can use it to access the GitHub API. var token = credential.accessToken; // ... } // The signed-in user info. var user = result.user; // IdP data available in result.additionalUserInfo.profile. // ... }).catch((error) => { // Handle Errors here. var errorCode = error.code; var errorMessage = error.message; // The email of the user's account used. var email = error.email; // The firebase.auth.AuthCredential type that was used. var credential = error.credential; // ... });
- Wenn Sie sich mit einem Pop-up-Fenster anmelden möchten, rufen Sie
Anmeldevorgang manuell verarbeiten
Sie können sich auch mit einem GitHub-Konto bei Firebase authentifizieren, indem Sie den Anmeldevorgang durch Aufrufen der GitHub OAuth 2.0-Endpunkte abwickeln:
- Bauen Sie die GitHub-Authentifizierung in Ihre App ein. Folgen Sie dazu der Entwicklerdokumentation. Am Ende des GitHub-Anmeldevorgangs erhalten Sie ein OAuth 2.0-Zugriffstoken.
- Wenn Sie sich in einer Node.js-Anwendung anmelden müssen, senden Sie das OAuth-Zugriffstoken an die Node.js-Anwendung.
- Nachdem sich ein Nutzer erfolgreich mit GitHub angemeldet hat, tauschen Sie das OAuth 2.0-Zugriffstoken gegen Anmeldedaten für Firebase ein:
Web
import { GithubAuthProvider } from "firebase/auth"; const credential = GithubAuthProvider.credential(token);
Web
var credential = firebase.auth.GithubAuthProvider.credential(token);
- Authentifizieren Sie sich mit dem Firebase-Anmeldedaten bei Firebase:
Web
import { getAuth, signInWithCredential } from "firebase/auth"; // Sign in with the credential from the user. const auth = getAuth(); signInWithCredential(auth, credential) .then((result) => { // Signed in // ... }) .catch((error) => { // Handle Errors here. const errorCode = error.code; const errorMessage = error.message; // The email of the user's account used. const email = error.customData.email; // ... });
Web
// Sign in with the credential from the user. firebase.auth() .signInWithCredential(credential) .then((result) => { // Signed in // ... }) .catch((error) => { // Handle Errors here. const errorCode = error.code; const errorMessage = error.message; // The email of the user's account used. const email = error.email; // ... });
Authentifizierung mit Firebase in einer Chrome-Erweiterung
Wenn Sie eine Chrome-Erweiterungs-App entwickeln, lesen Sie den Leitfaden zu Offscreen-Dokumenten.
Nächste Schritte
Wenn sich ein Nutzer zum ersten Mal anmeldet, wird ein neues Nutzerkonto erstellt und mit den Anmeldedaten verknüpft, mit denen sich der Nutzer angemeldet hat, also mit dem Nutzernamen und Passwort, der Telefonnummer oder den Informationen des Authentifizierungsanbieters. Dieses neue Konto wird als Teil Ihres Firebase-Projekts gespeichert und kann verwendet werden, um einen Nutzer in allen Apps Ihres Projekts zu identifizieren, unabhängig davon, wie sich der Nutzer anmeldet.
-
In Ihren Apps ist es am besten, den Authentifizierungsstatus des Nutzers zu ermitteln, indem Sie einen Observer für das
Auth-Objekt festlegen. Anschließend können Sie die grundlegenden Profilinformationen des Nutzers aus demUser-Objekt abrufen. Weitere Informationen finden Sie unter Nutzer verwalten. In Ihren Firebase Realtime Database- und Cloud Storage-Sicherheitsregeln können Sie die eindeutige Nutzer-ID des angemeldeten Nutzers aus der
auth-Variablen abrufen und damit steuern, auf welche Daten ein Nutzer zugreifen kann.
Sie können Nutzern erlauben, sich mit mehreren Authentifizierungsanbietern in Ihrer App anzumelden, indem Sie Anmeldedaten des Authentifizierungsanbieters mit einem vorhandenen Nutzerkonto verknüpfen.
Rufen Sie
signOut auf, um einen Nutzer abzumelden:
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. });