Autenticazione tramite Facebook Login con JavaScript

Puoi consentire agli utenti di eseguire l'autenticazione con Firebase utilizzando i loro account Facebook integrando Facebook Login nella tua app. Puoi integrare Facebook Login utilizzando l'SDK Firebase per eseguire il flusso di accesso o eseguendo manualmente il flusso di Facebook Login e passando il token di accesso risultante a Firebase.

Prima di iniziare

  1. Aggiungi Firebase al tuo progetto JavaScript.
  2. Nel sito Facebook for Developers, recupera l'ID app e un segreto dell'app per la tua app.
  3. Attiva Facebook Login come provider di accesso per il tuo progetto Firebase:
    1. Nella console Firebase, vai a Sicurezza > Autenticazione.
    2. Nella scheda Metodo di accesso , attiva il provider di accesso Facebook e specifica l'ID app e il segreto dell'app che hai ricevuto da Facebook.
    3. Assicurati che l'URI di reindirizzamento OAuth (ad esempio, my-app-12345.firebaseapp.com/__/auth/handler) sia elencato come uno degli URI di reindirizzamento OAuth nella pagina delle impostazioni dell'app Facebook sul sito Facebook for Developers nella configurazione Impostazioni prodotto > Facebook Login.

Gestire il flusso di accesso con l'SDK Firebase

Se stai creando un'app web, il modo più semplice per autenticare gli utenti con Firebase utilizzando i loro account Facebook è gestire il flusso di accesso con l'SDK Firebase JavaScript. (Se vuoi autenticare un utente in Node.js o in un altro ambiente non browser, devi gestire manualmente il flusso di accesso.)

Per gestire il flusso di accesso con l'SDK Firebase JavaScript:

  1. Crea un'istanza dell'oggetto provider Facebook:

    Web

    import { FacebookAuthProvider } from "firebase/auth";
    
    const provider = new FacebookAuthP_create.js

    Web

    var provider = new firebase.auth.FacebookAuthProvider();
  2. Facoltativo: specifica gli ambiti OAuth 2.0 aggiuntivi che vuoi richiedere al provider di autenticazione. Per aggiungere un ambito, chiama addScope. Ad esempio:

    Web

    provider.addScope('user_birthdacopes.js

    Web

    provider.addScope('user_birthdaebook.js
    Consulta la documentazione del provider di autenticazione.
  3. Facoltativo: per localizzare il flusso OAuth del provider nella lingua preferita dell'utente senza passare esplicitamente i parametri OAuth personalizzati pertinenti, aggiorna il codice della lingua nell'istanza Auth prima di avviare il flusso OAuth. Ad esempio:

    Web

    import { getAuth } from "firebase/auth";
    
    const auth = getAuth();
    auth.languageCode = 'it';
    // To apply the default browser preference instead of explicitly setting it.
    // auth.ust_language_code.js

    Web

    firebase.auth().languageCode = 'it';
    // To apply the default browser preference instead of explicitly setting it.
    // firebase.auth().useDeviceLanindex.js
  4. Facoltativo: specifica i parametri del provider OAuth personalizzati aggiuntivi che vuoi inviare con la richiesta OAuth. Per aggiungere un parametro personalizzato, chiama setCustomParameters sul provider inizializzato con un oggetto contenente la chiave come specificato dalla documentazione del provider OAuth e il valore corrispondente. Ad esempio:

    Web

    provider.setCustomParameters({
      'display': ovider_params.js

    Web

    provider.setCustomParameters({
      'display': ;
    });facebook.js
    I parametri OAuth obbligatori riservati non sono consentiti e verranno ignorati. Per maggiori dettagli, consulta il riferimento del provider di autenticazione.
  5. Esegui l'autenticazione con Firebase utilizzando l'oggetto provider Facebook. Puoi chiedere agli utenti di accedere con i loro account Facebook aprendo una finestra popup o reindirizzando alla pagina di accesso. Il metodo di reindirizzamento è preferibile sui dispositivi mobili.
    • Per accedere con una finestra popup, chiama signInWithPopup:

      Web

      import { getAuth, signInWithPopup, FacebookAuthProvider } from "firebase/auth";
      
      const auth = getAuth();
      signInWithPopup(auth, provider)
        .then(>(result) = {
          // The signed-in user info.
          const user = result.user;
      
          // This gives you a Facebook Access Token. You can use it to access the Facebook API.
          const credential = FacebookAuthProvider.credentialFromResult(result);
          const accessToken = credential.accessToken;
      
          // 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 = FacebookAuthProvider.credentialFromError(error);
      
        ignin_popup.js

      Web

      firebase
        .auth()
        .signInWithPopup(provider)
        .then((result) => {
          /** @type {firebase.auth.OAuthCredential} */
          var credential = result.credential;
      
          // The signed-in user info.
          var user = result.user;
          // IdP data available in result.additionalUserInfo.profile.
            // ...
      
          // This gives you a Facebook Access Token. You can use it to access the Facebook API.
          var accessToken = credential.accessToken;
      
          // ...
        })
        .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;
      
          // ...
       k.js
      Tieni presente che puoi recuperare il token OAuth del provider Facebook, che può essere utilizzato per recuperare dati aggiuntivi utilizzando le API di Facebook.

      Qui puoi anche rilevare e gestire gli errori. Per un elenco dei codici di errore, consulta la documentazione di riferimento di Auth.

    • Per accedere reindirizzando alla pagina di accesso, chiama signInWithRedirect: segui le best practice quando utilizzi `signInWithRedirect`.

      Web

      import { getAuth, signInWithRedirect } from "firebase/auth";
      
      const auth = getAuth();
      signInWithRedirect(auth, edirect.js

      Web

      firebase.auth().signInWithRedirect(provider);
      Poi, puoi anche recuperare il token OAuth del provider Facebook chiamando getRedirectResult quando la pagina viene caricata:

      Web

      import { getAuth, getRedirectResult, FacebookAuthProvider } from "firebase/auth";
      
      const auth = getAuth();
      getRedirectResult(auth)
        .then(>(result) = {
          // This gives you a Facebook Access Token. You can use it to access the Facebook API.
          const credential = FacebookAuthProvider.credentialFromResult(result);
          const token = credential.accessToken;
      
          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;
          // AuthCredential type that was used.
          const credential = FacebookAuthProvider.credentialFromError(error);
        rect_result.js

      Web

      firebase.auth()
        .getRedirectResult()
        .then((result) => {
          if (result.credential) {
            /** @type {firebase.auth.OAuthCredential} */
            var credential = result.credential;
      
            // This gives you a Facebook Access Token. You can use it to access the Facebook 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;
          // ...
       k.js
      Qui puoi anche rilevare e gestire gli errori. Per un elenco dei codici di errore, consulta la documentazione di riferimento di Auth.

Eseguire l'autenticazione con Firebase in un'estensione di Chrome

Se stai creando un'app di estensione di Chrome, consulta la guida ai documenti offscreen.

Passaggi successivi

La prima volta che un utente accede, viene creato un nuovo account utente collegato alle credenziali con cui ha eseguito l'accesso, ovvero nome utente e password, numero di telefono o informazioni del provider di autenticazione. Questo nuovo account viene memorizzato come parte del tuo progetto Firebase e può essere utilizzato per identificare un utente in ogni app del tuo progetto, indipendentemente dalla modalità di accesso.

  • Nelle tue app, il modo consigliato per conoscere lo stato di autenticazione dell'utente è impostare un observer sull'oggetto Auth. Puoi quindi ottenere le informazioni di base del profilo dell'utente dall'oggetto User. Consulta Gestire gli utenti.

  • Nelle regole di sicurezza di Firebase Realtime Database e Cloud Storage , puoi ottenere l'ID utente univoco dell'utente che ha eseguito l'accesso dalla variabile auth, e utilizzarlo per controllare i dati a cui un utente può accedere.

Puoi consentire agli utenti di accedere alla tua app utilizzando più provider di autenticazione collegando le credenziali del provider di autenticazione a un account utente esistente.

Per disconnettere un utente, chiama signOut:

Web

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

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

Web

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