Accesso degli utenti con Google
Questo documento illustra come utilizzare Identity Platform per far accedere gli utenti con Google.
Prima di iniziare
Questo tutorial presuppone che tu abbia già abilitato Identity Platform e app web di base scritta utilizzando HTML e JavaScript. Consulta le Guida rapida per scoprire come.
Configurazione di Google come provider
Per configurare Google come provider di identità:
Vai alla pagina Provider di identità nella console Google Cloud.
Fai clic su Aggiungi un provider.
Seleziona Google dall'elenco.
Inserisci l'ID client web e il client secret web di Google. Se non hai ancora un ID e un secret, puoi ottenerne uno dalla pagina API e servizi.
Configura l'URI elencato in Configura Google come URI di reindirizzamento OAuth valido per la tua app Google. Se hai configurato un dominio personalizzato in Identity Platform, aggiornate l'URI di reindirizzamento nella configurazione dell'app Google in modo da utilizzare il dominio personalizzato anziché quello predefinito. Ad esempio, modifica
https://myproject.firebaseapp.com/__/auth/handler
inhttps://auth.myownpersonaldomain.com/__/auth/handler
.Registra i domini della tua app facendo clic su Aggiungi dominio in Domini autorizzati. Per scopi di sviluppo,
localhost
è già attivato per impostazione predefinita.In Configura l'applicazione, fai clic su Dettagli di configurazione. Copia lo snippet nel codice dell'app per inizializzare l'SDK client di Identity Platform.
Fai clic su Salva.
Accesso degli utenti con l'SDK client
Crea un'istanza dell'oggetto provider Google:
Versione web 9
import { GoogleAuthProvider } from "firebase/auth"; const provider = new GoogleAuthProvider();
Versione web 8
var provider = new firebase.auth.GoogleAuthProvider();
(Facoltativo) Aggiungi gli ambiti OAuth. Gli ambiti specificano quali dati sei una richiesta da parte di Google. I dati più sensibili potrebbero richiedere scopi specifici. Consulta la documentazione del fornitore per determinare gli ambiti di cui ha bisogno la tua app.
Versione web 9
provider.addScope('https://www.googleapis.com/auth/contacts.readonly');
Versione web 8
provider.addScope('https://www.googleapis.com/auth/contacts.readonly');
Facoltativo: localizza il flusso di autenticazione. Puoi specificare una lingua o utilizzare la lingua predefinita del dispositivo:
Versione web 9
import { getAuth } from "firebase/auth"; const auth = getAuth(); auth.languageCode = 'it'; // To apply the default browser preference instead of explicitly setting it. // auth.useDeviceLanguage();
Versione web 8
firebase.auth().languageCode = 'it'; // To apply the default browser preference instead of explicitly setting it. // firebase.auth().useDeviceLanguage();
Facoltativo:specifica parametri OAuth aggiuntivi personalizzati. Sono specifiche di Google e in genere vengono utilizzate per personalizzare l'esperienza di autenticazione. Non puoi trasmettere parametri riservati da OAuth o Identity Platform.
Versione web 9
provider.setCustomParameters({ 'login_hint': 'user@example.com' });
Versione web 8
provider.setCustomParameters({ 'login_hint': 'user@example.com' });
Utilizza l'oggetto provider Google per eseguire l'accesso dell'utente. Puoi aprire una finestra popup o reindirizzare la pagina corrente. Il reindirizzamento è più semplice per gli utenti di dispositivi mobili.
Per visualizzare un popup, chiama
signInWithPopup()
:Versione web 9
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); // ... });
Versione web 8
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; // ... });
Per reindirizzare la pagina, devi prima chiamare
signInWithRedirect()
.Segui le best practice quando utilizzi
signInWithRedirect
,linkWithRedirect
oreauthenticateWithRedirect
.Versione web 9
import { getAuth, signInWithRedirect } from "firebase/auth"; const auth = getAuth(); signInWithRedirect(auth, provider);
Versione web 8
firebase.auth().signInWithRedirect(provider);
Poi, recupera il token Google chiamando
getRedirectResult()
al caricamento della pagina:Versione web 9
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); // ... });
Versione web 8
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; // ... });
Una volta ottenuto un token di accesso, puoi utilizzarlo per chiamare l'API di Google. Ad esempio:
REST
curl -H "Authorization: Bearer [TOKEN]" https://www.googleapis.com/oauth2/v2/userinfo
Accesso manuale degli utenti
Se non vuoi utilizzare l'SDK client, puoi gestire manualmente anche il flusso di accesso:
Integra l'autenticazione Google nella tua app seguendo questa procedura nella documentazione per gli sviluppatori.
Fai accedere l'utente con Google utilizzando il flusso implementato nel passaggio precedente.
Scambia il token che ricevi da Google con un Credenziale Identity Platform:
Versione web 9
import { GoogleAuthProvider } from "firebase/auth"; const credential = GoogleAuthProvider.credential(idToken);
Versione web 8
var credential = firebase.auth.GoogleAuthProvider.credential(idToken);
Utilizza le credenziali per far accedere l'utente con Identity Platform:
Versione web 9
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; // ... });
Versione web 8
// 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; // ... });
Passaggi successivi
- Scopri di più sugli utenti di Identity Platform.
- Consentire l'accesso degli utenti ad altri provider di identità.