Uwierzytelniaj przez Google za pomocą JavaScriptu

Możesz zezwolić użytkownikom na uwierzytelnianie się w Firebase przy użyciu ich kont Google. Możesz użyć pakietu SDK Firebase, aby przeprowadzić proces logowania się w Google, lub przeprowadzić go ręcznie za pomocą biblioteki Logowanie z Google i przekazać uzyskany token identyfikatora do Firebase.

Zanim zaczniesz

  1. Dodaj Firebase do projektu JavaScript.
  2. Włącz Google jako metodę logowania w konsoli Firebase:
    1. W konsoli Firebase otwórz sekcję Autoryzacja.
    2. Na karcie Metoda logowania włącz metodę logowania Google i kliknij Zapisz.

Obsługa procesu logowania za pomocą pakietu SDK Firebase

Jeśli tworzysz aplikację internetową, najprostszym sposobem uwierzytelniania użytkowników za pomocą Firebase przy użyciu ich kont Google jest obsługa procesu logowania za pomocą pakietu SDK JavaScript Firebase. (jeśli chcesz uwierzytelnić użytkownika w Node.js lub innym środowisku poza przeglądarką, musisz ręcznie obsłużyć proces logowania).

Aby obsłużyć proces logowania za pomocą pakietu Firebase JavaScript SDK, wykonaj te czynności:

  1. Utwórz instancję obiektu dostawcy Google:

    Web

    import { GoogleAuthProvider } from "firebase/auth";
    
    const provider = new GoogleAuthProvider();

    Web

    var provider = new firebase.auth.GoogleAuthProvider();
  2. Opcjonalnie: określ dodatkowe zakresy OAuth 2.0, o które chcesz poprosić dostawcę usługi uwierzytelniania. Aby dodać zakres, wywołaj funkcjęaddScope. Przykład:

    Web

    provider.addScope('https://www.googleapis.com/auth/contacts.readonly');

    Web

    provider.addScope('https://www.googleapis.com/auth/contacts.readonly');
    Zapoznaj się z dokumentacją dostawcy uwierzytelniania.
  3. Opcjonalnie: aby zlokalizować proces OAuth dostawcy w preferowanym języku użytkownika bez przekazywania wprost odpowiednich niestandardowych parametrów OAuth, przed rozpoczęciem procesu OAuth zaktualizuj kod języka w instancji uwierzytelniania. Przykład:

    Web

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

    Web

    firebase.auth().languageCode = 'it';
    // To apply the default browser preference instead of explicitly setting it.
    // firebase.auth().useDeviceLanguage();
  4. Opcjonalnie: określ dodatkowe parametry dostawcy OAuth, które chcesz wysłać z prośbą OAuth. Aby dodać parametr niestandardowy, wywołaj metodę setCustomParameters w zainicjowanym dostawcy z obiektem zawierającym klucz zgodnie z dokumentacją dostawcy OAuth i odpowiednią wartością. Przykład:

    Web

    provider.setCustomParameters({
      'login_hint': '[email protected]'
    });

    Web

    provider.setCustomParameters({
      'login_hint': '[email protected]'
    });
    Zarezerwowane wymagane parametry OAuth są niedozwolone i zignorowane. Więcej informacji znajdziesz w materiałach referencyjnych dostawcy usług uwierzytelniania.
  5. Uwierzytelnij się w Firebase, używając obiektu dostawcy Google. Możesz poprosić użytkowników o zalogowanie się na swoje konta Google, otwierając okno wyskakujące lub przekierowując ich na stronę logowania. Na urządzeniach mobilnych preferowana jest metoda przekierowania.
    • Aby zalogować się w wyskakującym okienku, zadzwoń pod numer signInWithPopup:

      Web

      import { getAuth, signInWithPopup, GoogleAuthProvider } from "firebase/auth";
      
      const auth = getAuth();
      signInWithPopup(auth, provider)
        .then((result) => {
          // This gives you a Google Access Token. You can use it to access the Google API.
          const credential = GoogleAuthProvider.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 = GoogleAuthProvider.credentialFromError(error);
          // ...
        });

      Web

      firebase.auth()
        .signInWithPopup(provider)
        .then((result) => {
          /** @type {firebase.auth.OAuthCredential} */
          var credential = result.credential;
      
          // This gives you a Google Access Token. You can use it to access the Google 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;
          // ...
        });
      Pamiętaj też, że możesz pobrać token OAuth dostawcy Google, który możesz wykorzystać do pobierania dodatkowych danych za pomocą interfejsów API Google.

      Tutaj możesz też wykrywać i rozwiązywać błędy. Listę kodów błędów znajdziesz w dokumentacji na temat autoryzacji.

    • Aby zalogować się przez przekierowanie na stronę logowania, wywołaj funkcję signInWithRedirect: Stosuj sprawdzone metody podczas używania funkcji signInWithRedirect.

      Web

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

      Web

      firebase.auth().signInWithRedirect(provider);
      Następnie możesz też pobrać token OAuth dostawcy Google, wywołując funkcję getRedirectResult po załadowaniu strony:

      Web

      import { getAuth, getRedirectResult, GoogleAuthProvider } from "firebase/auth";
      
      const auth = getAuth();
      getRedirectResult(auth)
        .then((result) => {
          // This gives you a Google Access Token. You can use it to access Google APIs.
          const credential = GoogleAuthProvider.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 = GoogleAuthProvider.credentialFromError(error);
          // ...
        });

      Web

      firebase.auth()
        .getRedirectResult()
        .then((result) => {
          if (result.credential) {
            /** @type {firebase.auth.OAuthCredential} */
            var credential = result.credential;
      
            // This gives you a Google Access Token. You can use it to access the Google 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;
          // ...
        });
      Tutaj możesz też wykrywać i rozwiązywać błędy. Listę kodów błędów znajdziesz w dokumentacji na temat autoryzacji.

Uwierzytelnianie za pomocą Firebase w rozszerzeniu do Chrome

Jeśli tworzysz aplikację rozszerzenia do Chrome, zapoznaj się z  przewodnikiem po dokumentach poza ekranem.

Dalsze kroki

Gdy użytkownik zaloguje się po raz pierwszy, zostanie utworzone nowe konto użytkownika i połączone z danymi logowania, czyli nazwą użytkownika i hasłem, numerem telefonu lub informacjami dostawcy uwierzytelniania, za pomocą których użytkownik się zalogował. To nowe konto jest przechowywane w ramach projektu Firebase i może służyć do identyfikowania użytkownika we wszystkich aplikacjach w projekcie, niezależnie od tego, jak użytkownik się loguje.

  • W swoich aplikacjach możesz sprawdzić stan uwierzytelniania użytkownika, ustawiając obserwatora na obiekcie Auth. Następnie możesz uzyskać podstawowe informacje o profilu użytkownika z obiektu User. Zobacz Zarządzanie użytkownikami.

  • W regułach Firebase Realtime DatabaseCloud Storage Regułach bezpieczeństwa możesz pobrać z zmiennej auth unikalny identyfikator zalogowanego użytkownika i użyć go do kontrolowania, do jakich danych ma on dostęp.

Możesz zezwolić użytkownikom na logowanie się w aplikacji za pomocą danych logowania od wielu dostawców uwierzytelniania, połączając je z dotychczasowym kontem użytkownika.

Aby wylogować użytkownika, wywołaj funkcję 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.
});