Puoi consentire agli utenti di eseguire l'autenticazione con Firebase utilizzando i loro account GitHub integrando l'autenticazione GitHub nella tua app. Puoi integrare l'autenticazione GitHub utilizzando l'SDK Firebase per eseguire il flusso di accesso o eseguendo manualmente il flusso OAuth 2.0 di GitHub e passando il token di accesso risultante a Firebase.
Prima di iniziare
- Aggiungi Firebase al tuo progetto JavaScript.
- Nella console Firebase, vai a Sicurezza > Autenticazione.
- Nella scheda Metodo di accesso, attiva il provider di accesso GitHub.
-
Aggiungi l'ID cliente e il client secret dalla console per sviluppatori di quel provider alla configurazione del provider:
- Registra la tua app come applicazione per sviluppatori su GitHub e ottieni l' ID cliente e il client secret OAuth 2.0 della tua app.
-
Assicurati che l'URI di reindirizzamento OAuth di Firebase (ad esempio,
my-app-12345.firebaseapp.com/__/auth/handler) sia impostato come l' URL di callback dell'autorizzazione nella pagina delle impostazioni dell'app nella configurazione dell'app GitHub.
- Fai clic su Salva.
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 GitHub è 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, segui questi passaggi:
- Crea un'istanza dell'oggetto provider GitHub:
Web
import { GithubAuthProvider } from "firebase/auth"; const provider = new GithubAuthProvider();
Web
var provider = new firebase.auth.GithubAuthProvider();
- Facoltativo: specifica gli ambiti OAuth 2.0 aggiuntivi che vuoi richiedere al provider di autenticazione. Per aggiungere un ambito, chiama
addScope. Ad esempio:Consulta la documentazione del provider di autenticazione.Web
provider.addScope('repo');
Web
provider.addScope('repo');
- Facoltativo: specifica i parametri del provider OAuth personalizzati aggiuntivi
che vuoi inviare con la richiesta OAuth. Per aggiungere un parametro personalizzato, chiama
setCustomParameterssul provider inizializzato con un oggetto contenente la chiave come specificato dalla documentazione del provider OAuth e il valore corrispondente. Ad esempio:I parametri OAuth obbligatori riservati non sono consentiti e verranno ignorati. Per maggiori dettagli, consulta il riferimento del provider di autenticazione.Web
provider.setCustomParameters({ 'allow_signup': 'false' });
Web
provider.setCustomParameters({ 'allow_signup': 'false' });
- Esegui l'autenticazione con Firebase utilizzando l'oggetto provider GitHub. Puoi
chiedere agli utenti di accedere con i loro account GitHub 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:Tieni presente che puoi recuperare il token OAuth del provider GitHub, che può essere utilizzato per recuperare dati aggiuntivi utilizzando le API GitHub.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; // ... });
Qui puoi anche rilevare e gestire gli errori. Per un elenco dei codici di errore, consulta la documentazione di riferimento dell'autenticazione.
- Per accedere reindirizzando alla pagina di accesso, chiama
signInWithRedirect: segui le best practice quando utilizzi `signInWithRedirect`.Poi, puoi anche recuperare il token OAuth del provider GitHub chiamandoWeb
import { getAuth, signInWithRedirect } from "firebase/auth"; const auth = getAuth(); signInWithRedirect(auth, provider);
Web
firebase.auth().signInWithRedirect(provider);
getRedirectResultquando la pagina viene caricata:Qui puoi anche rilevare e gestire gli errori. Per un elenco dei codici di errore, consulta la documentazione di riferimento dell'autenticazione.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; // ... });
- Per accedere con una finestra popup, chiama
Gestire manualmente il flusso di accesso
Puoi anche eseguire l'autenticazione con Firebase utilizzando un account GitHub gestendo il flusso di accesso chiamando gli endpoint OAuth 2.0 di GitHub:
- Integra l'autenticazione GitHub nella tua app seguendo la documentazione per gli sviluppatori. Al termine del flusso di accesso a GitHub, riceverai un token di accesso OAuth 2.0.
- Se devi accedere a un'applicazione Node.js, invia il token di accesso OAuth token all'applicazione Node.js.
- Dopo che un utente ha eseguito l'accesso con GitHub, scambia il token di accesso OAuth 2.0
accesso con una credenziale Firebase:
Web
import { GithubAuthProvider } from "firebase/auth"; const credential = GithubAuthProvider.credential(token);
Web
var credential = firebase.auth.GithubAuthProvider.credential(token);
- Esegui l'autenticazione con Firebase utilizzando la credenziale 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; // ... });
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
Dopo che un utente ha eseguito l'accesso per la prima volta, viene creato un nuovo account utente e 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'oggettoUser. 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.
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 happened. });
Web
firebase.auth().signOut().then(() => { // Sign-out successful. }).catch((error) => { // An error happened. });