Mit Twitter in JavaScript authentifizieren

Sie können die Twitter-Authentifizierung in Ihre App einbinden, damit sich Nutzer mit ihren Twitter-Konten bei Firebase authentifizieren können. Sie können die Twitter-Authentifizierung entweder mit dem Firebase SDK für den Anmeldevorgang oder manuell für den Twitter OAuth-Vorgang einbinden und das resultierende Zugriffstoken und Secret an Firebase übergeben.

Hinweis

  1. Fügen Sie Ihrem JavaScript-Projekt Firebase hinzu.
  2. Öffnen Sie in der Firebase Console den Bereich Auth.
  3. Aktivieren Sie auf dem Tab Anmeldemethode den Anbieter Twitter.
  4. Fügen Sie der Anbieterkonfiguration den API-Schlüssel und das API-Secret aus der Entwicklerkonsole des Anbieters hinzu:
    1. App registrieren als Entwickleranwendung auf Twitter und rufen Sie den OAuth-API-Schlüssel Ihrer App ab. und API-Secret.
    2. Prüfen Sie, ob der OAuth-Weiterleitungs-URI von Firebase (z.B. my-app-12345.firebaseapp.com/__/auth/handler) die als Callback-URL für die Autorisierung festgelegt ist. Wählen Sie dazu in den App-Einstellungen auf Ihrem Konfiguration der Twitter-App
  5. Klicken Sie auf Speichern.

Anmeldevorgang mit dem Firebase SDK durchführen

Wenn Sie eine Webanwendung erstellen, ist es am einfachsten, Ihre Nutzer zu authentifizieren. mit Firebase und ihren Twitter-Konten ist die Anmeldung mit das Firebase JavaScript SDK. (Wenn Sie einen Nutzer in Node.js authentifizieren möchten oder einer anderen nicht browsergestützten Umgebung, müssen Sie den Anmeldevorgang manuell durchführen.

Gehen Sie wie folgt vor, um den Anmeldevorgang mit dem Firebase JavaScript SDK durchzuführen: Schritte:

  1. Erstellen Sie eine Instanz des Twitter-Anbieter-Objekts:
    WebWeb
    import { TwitterAuthProvider } from "firebase/auth";

    const provider = new TwitterAuthProvider();
    var provider = new firebase.auth.TwitterAuthProvider();
  2. Optional: Wenn du den OAuth-Ablauf des Anbieters in der bevorzugten Sprache des Nutzers lokalisieren möchtest, ohne die entsprechenden benutzerdefinierten OAuth-Parameter explizit zu übergeben, aktualisiere den Sprachcode in der Auth-Instanz, bevor du den OAuth-Ablauf startest. Beispiel:
    WebWeb
    import { getAuth } from "firebase/auth";

    const auth = getAuth();
    auth
    .languageCode = 'it';
    // To apply the default browser preference instead of explicitly setting it.
    // auth.useDeviceLanguage();
    firebase.auth().languageCode = 'it';
    // To apply the default browser preference instead of explicitly setting it.
    // firebase.auth().useDeviceLanguage();
  3. Optional: Geben Sie zusätzliche benutzerdefinierte OAuth-Anbieterparameter an, die mit der OAuth-Anfrage gesendet werden sollen. Um einen benutzerdefinierten Parameter hinzuzufügen, rufen Sie setCustomParameters beim initialisierten Anbieter mit einem Objekt, das den Schlüssel enthält OAuth-Anbieter und im entsprechenden Wert angegeben. Beispiel:
    WebWeb
    provider.setCustomParameters({
     
    'lang': 'es'
    });
    provider.setCustomParameters({
     
    'lang': 'es'
    });
    Reservierte erforderliche OAuth-Parameter sind nicht zulässig und werden ignoriert. Siehe Authentifizierungsanbieter-Referenz für weitere Informationen.
  4. Authentifizieren Sie sich mit dem Twitter-Anbieterobjekt bei Firebase. Sie können fordern Sie Ihre Nutzer auf, sich mit ihrem Twitter-Konto anzumelden, indem sie entweder ein Pop-up-Fenster öffnen oder zur Anmeldeseite weitergeleitet werden. Die Weiterleitungsmethode wird auf Mobilgeräten bevorzugt.
    • Wenn Sie sich über ein Pop-up-Fenster anmelden möchten, drücken Sie signInWithPopup:
      WebWeb
      import { getAuth, signInWithPopup, TwitterAuthProvider } from "firebase/auth";

      const auth = getAuth();
      signInWithPopup
      (auth, provider)
       
      .then((result) => {
         
      // This gives you a the Twitter OAuth 1.0 Access Token and Secret.
         
      // You can use these server side with your app's credentials to access the Twitter API.
         
      const credential = TwitterAuthProvider.credentialFromResult(result);
         
      const token = credential.accessToken;
         
      const secret = credential.secret;

         
      // 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 = TwitterAuthProvider.credentialFromError(error);
         
      // ...
       
      });
      firebase
       
      .auth()
       
      .signInWithPopup(provider)
       
      .then((result) => {
         
      /** @type {firebase.auth.OAuthCredential} */
         
      var credential = result.credential;

         
      // This gives you a the Twitter OAuth 1.0 Access Token and Secret.
         
      // You can use these server side with your app's credentials to access the Twitter API.
         
      var token = credential.accessToken;
         
      var secret = credential.secret;

         
      // 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;
         
      // ...
       
      });
      Beachten Sie außerdem, dass Sie das OAuth-Token des Twitter-Anbieters abrufen können, mit dem zusätzliche Daten mithilfe der Twitter-APIs abgerufen werden können.

      Hier können Sie auch Fehler abfangen und behandeln. Eine Liste der Fehlercodes findest du in den Auth-Referenzdokumenten.

    • Wenn Sie sich durch Weiterleitung zur Anmeldeseite anmelden möchten, rufen Sie signInWithRedirect auf: Folgen Sie den Best Practices für die Verwendung von „signInWithWeiterleitung“.
      WebWeb
      import { getAuth, signInWithRedirect } from "firebase/auth";

      const auth = getAuth();
      signInWithRedirect
      (auth, provider);
      firebase.auth().signInWithRedirect(provider);
      Dann können Sie auch das OAuth-Token des Twitter-Anbieters abrufen, indem Sie folgenden Befehl aufrufen: getRedirectResult beim Laden der Seite:
      WebWeb
      import { getAuth, getRedirectResult, TwitterAuthProvider } from "firebase/auth";

      const auth = getAuth();
      getRedirectResult
      (auth)
       
      .then((result) => {
         
      // This gives you a the Twitter OAuth 1.0 Access Token and Secret.
         
      // You can use these server side with your app's credentials to access the Twitter API.
         
      const credential = TwitterAuthProvider.credentialFromResult(result);
         
      const token = credential.accessToken;
         
      const secret = credential.secret;
         
      // ...

         
      // 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 = TwitterAuthProvider.credentialFromError(error);
         
      // ...
       
      });
      firebase.auth()
       
      .getRedirectResult()
       
      .then((result) => {
         
      if (result.credential) {
           
      /** @type {firebase.auth.OAuthCredential} */
           
      var credential = result.credential;

           
      // This gives you a the Twitter OAuth 1.0 Access Token and Secret.
           
      // You can use these server side with your app's credentials to access the Twitter API.
           
      var token = credential.accessToken;
           
      var secret = credential.secret;
           
      // ...
         
      }

         
      // 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 Referenzdokumentation zur Authentifizierung.

Wenn Sie in der Firebase Console die Einstellung Ein Konto pro E-Mail-Adresse aktiviert haben und ein Nutzer versucht, sich bei einem Anbieter (z. B. Twitter) mit einer E-Mail-Adresse anzumelden, die bereits für den Anbieter eines anderen Firebase-Nutzers (z. B. Google) vorhanden ist, wird der Fehler auth/account-exists-with-different-credential zusammen mit einem AuthCredential-Objekt (Twitter-OAuth-Token und -Secret) ausgelöst. Schließen Sie die Anmeldung im muss sich der Nutzer zuerst beim vorhandenen Anbieter (Google) anmelden und dann auf den früheren AuthCredential (Twitter-OAuth-Token und -Secret)

Wenn Sie signInWithPopup verwenden, können Sie auth/account-exists-with-different-credential-Fehler mit Code wie im folgenden Beispiel behandeln:

import {
  getAuth
,
  linkWithCredential
,
  signInWithPopup
,
 
TwitterAuthProvider,
} from "firebase/auth";

try {
 
// Step 1: User tries to sign in using Twitter.
  let result
= await signInWithPopup(getAuth(), new TwitterAuthProvider());
} catch (error) {
 
// Step 2: User's email already exists.
 
if (error.code === "auth/account-exists-with-different-credential") {
   
// The pending Twitter credential.
    let pendingCred
= error.credential;

   
// Step 3: Save the pending credential in temporary storage,

   
// Step 4: Let the user know that they already have an account
   
// but with a different provider, and let them choose another
   
// sign-in method.
 
}
}

// ...

try {
 
// Step 5: Sign the user in using their chosen method.
  let result
= await signInWithPopup(getAuth(), userSelectedProvider);

 
// Step 6: Link to the Twitter credential.
 
// TODO: implement `retrievePendingCred` for your app.
  let pendingCred
= retrievePendingCred();

 
if (pendingCred !== null) {
   
// As you have access to the pending credential, you can directly call the
   
// link method.
    let user
= await linkWithCredential(result.user, pendingCred);
 
}

 
// Step 7: Continue to app.
} catch (error) {
 
// ...
}

Weiterleitungsmodus

Dieser Fehler wird im Weiterleitungsmodus ähnlich behandelt, mit dem Unterschied, dass die ausstehenden Anmeldedaten müssen zwischen Seitenweiterleitungen im Cache gespeichert werden (z. B. über Sitzungsspeicher).

Anmeldevorgang manuell verarbeiten

Sie können sich auch mit einem Twitter-Konto bei Firebase authentifizieren, indem Sie den Anmeldevorgang durch Aufrufen der Twitter-OAuth-Endpunkte:

  1. Integrieren Sie die Twitter-Authentifizierung in Ihre App, indem Sie der Entwicklerdokumentation. Am Ende der Twitter-Anmeldung erhält ein OAuth-Zugriffstoken und ein OAuth-Secret.
  2. Wenn Sie sich in einer Node.js-Anwendung anmelden müssen, senden Sie den OAuth-Zugriff und das OAuth-Secret für die Node.js-Anwendung.
  3. Nachdem sich ein Nutzer erfolgreich mit Twitter angemeldet hat, tauschen Sie das OAuth-Zugriffstoken und das OAuth-Secret gegen Firebase-Anmeldedaten aus:
    var credential = firebase.auth.TwitterAuthProvider.credential(token, secret);
  4. Authentifizieren Sie sich mit den Firebase-Anmeldedaten bei Firebase:
    WebWeb
    import { getAuth, signInWithCredential, FacebookAuthProvider } from "firebase/auth";

    // Sign in with the credential from the Facebook user.
    const auth = getAuth();
    signInWithCredential
    (auth, credential)
     
    .then((result) => {
       
    // Signed in
       
    const credential = FacebookAuthProvider.credentialFromResult(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 = FacebookAuthProvider.credentialFromError(error);
       
    // ...
     
    });
    // Sign in with the credential from the Facebook user.
    firebase
    .auth().signInWithCredential(credential)
     
    .then((result) => {
       
    // Signed in      
       
    var credential = result.credential;
       
    // ...
     
    })
     
    .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;
       
    // ...
     
    });

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.

Bei der Projekterstellung stellt Firebase eine eindeutige Subdomain für Ihr Projekt bereit: https://my-app-12345.firebaseapp.com

Diese wird auch als Weiterleitungsmechanismus für die OAuth-Anmeldung verwendet. Diese Domain müsste für alle unterstützten OAuth-Anbieter zulässig. Das bedeutet jedoch, dass Nutzer diese Domain möglicherweise sehen, während sie sich bei Twitter anmelden, bevor sie zur Anwendung weitergeleitet werden: Weiter zu: https://my-app-12345.firebaseapp.com.

Wenn Sie Ihre Subdomain nicht anzeigen lassen möchten, können Sie eine benutzerdefinierte Domain mit Firebase Hosting einrichten:

  1. Befolgen Sie die Schritte 1 bis 3 in Richten Sie Ihre Domain für Hosting ein. Wenn Sie die Inhaberschaft Ihrer Domain bestätigen, stellt Hosting ein SSL-Zertifikat für Ihre benutzerdefinierte Domain bereit.
  2. Fügen Sie Ihre benutzerdefinierte Domain in der Firebase-Konsole der Liste der autorisierten Domains hinzu: auth.custom.domain.com.
  3. Füge in der Twitter-Entwicklerkonsole oder auf der OAuth-Einrichtungsseite die URL der Weiterleitungsseite auf die Zulassungsliste, auf die über deine benutzerdefinierte Domain zugegriffen werden kann: https://auth.custom.domain.com/__/auth/handler.
  4. Geben Sie beim Initialisieren der JavaScript-Bibliothek Ihre benutzerdefinierte Domain im Feld authDomain an:
    var config = {
      apiKey
    : '...',
     
    // Changed from 'my-app-12345.firebaseapp.com'.
      authDomain
    : 'auth.custom.domain.com',
      databaseURL
    : 'https://my-app-12345.firebaseio.com',
      projectId
    : 'my-app-12345',
      storageBucket
    : 'my-app-12345.appspot.com',
      messagingSenderId
    : '1234567890'
    };
    firebase
    .initializeApp(config);

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.

  • In Ihren Apps sollten Sie den Authentifizierungsstatus des Nutzers am besten über einen Beobachter für das Auth-Objekt ermitteln. Die grundlegenden Profilinformationen des Nutzers können Sie dann aus dem User-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 Variablen auth abrufen und damit steuern, auf welche Daten ein Nutzer zugreifen kann.

Sie können Nutzern erlauben, sich über mehrere Authentifizierungsanbieter in Ihrer App anzumelden, indem Sie Anmeldedaten des Authentifizierungsanbieters mit einem vorhandenen Nutzerkonto verknüpfen.

Wenn Sie einen Nutzer abmelden möchten, rufen Sie signOut auf:

WebWeb
import { getAuth, signOut } from "firebase/auth";

const auth = getAuth();
signOut
(auth).then(() => {
 
// Sign-out successful.
}).catch((error) => {
 
// An error happened.
});
firebase.auth().signOut().then(() => {
 
// Sign-out successful.
}).catch((error) => {
 
// An error happened.
});