Puoi utilizzare Firebase Authentication per consentire agli utenti di eseguire l'autenticazione con Firebase utilizzando i propri indirizzi email e password e per gestire gli account basati su password della tua app.
Prima di iniziare
Se non l'hai ancora fatto, aggiungi Firebase al tuo progetto Android.
- Se non hai ancora connesso la tua app al progetto Firebase, fallo dalla console Firebase.
- Attiva l'accesso con email/password:
- Nella Firebaseconsole, apri la sezione Auth.
- Nella scheda Metodo di accesso, attiva il metodo di accesso Email/password e fai clic su Salva.
Nel file Gradle (a livello di app) del modulo (di solito
<project>/<app-module>/build.gradle.kts
o<project>/<app-module>/build.gradle
), aggiungi la dipendenza per la libreria Firebase Authentication per Android. Ti consigliamo di utilizzare Firebase Android BoM per controllare il controllo delle versioni della libreria.dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:34.0.0")) // Add the dependency for the Firebase Authentication library // When using the BoM, you don't specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-auth") }
Utilizzando la Firebase Android BoM, la tua app utilizzerà sempre versioni compatibili delle librerie Firebase Android.
(Alternativa) Aggiungi le dipendenze della libreria Firebase senza utilizzare BoM
Se scegli di non utilizzare la Firebase BoM, devi specificare ogni versione della libreria Firebase nella riga della dipendenza.
Tieni presente che se utilizzi più librerie Firebase nella tua app, ti consigliamo vivamente di utilizzare la BoM per gestire le versioni delle librerie, in modo da garantire la compatibilità di tutte le versioni.
dependencies { // Add the dependency for the Firebase Authentication library // When NOT using the BoM, you must specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-auth:24.0.0") }
Creare un account basato su password
Per creare un nuovo account utente con una password, completa i seguenti passaggi nell'attività di accesso della tua app:
- Nel metodo
onCreate
dell'attività di registrazione, recupera l'istanza condivisa dell'oggettoFirebaseAuth
:Kotlin
private lateinit var auth: FirebaseAuth // ... // Initialize Firebase Auth auth = Firebase.auth
Java
private FirebaseAuth mAuth; // ... // Initialize Firebase Auth mAuth = FirebaseAuth.getInstance();
- Quando inizializzi l'attività, controlla se l'utente ha eseguito l'accesso:
Kotlin
public override fun onStart() { super.onStart() // Check if user is signed in (non-null) and update UI accordingly. val currentUser = auth.currentUser if (currentUser != null) { reload() } }
Java
@Override public void onStart() { super.onStart(); // Check if user is signed in (non-null) and update UI accordingly. FirebaseUser currentUser = mAuth.getCurrentUser(); if(currentUser != null){ reload(); } }
- Quando un nuovo utente si registra utilizzando il modulo di registrazione della tua app, completa tutti i nuovi passaggi di convalida dell'account richiesti dalla tua app, ad esempio verifica che la password del nuovo account sia stata digitata correttamente e soddisfi i requisiti di complessità.
- Crea un nuovo account passando l'indirizzo email e la password del nuovo utente
a
createUserWithEmailAndPassword
:Kotlin
auth.createUserWithEmailAndPassword(email, password) .addOnCompleteListener(this) { task -> if (task.isSuccessful) { // Sign in success, update UI with the signed-in user's information Log.d(TAG, "createUserWithEmail:success") val user = auth.currentUser updateUI(user) } else { // If sign in fails, display a message to the user. Log.w(TAG, "createUserWithEmail:failure", task.exception) Toast.makeText( baseContext, "Authentication failed.", Toast.LENGTH_SHORT, ).show() updateUI(null) } }
Java
mAuth.createUserWithEmailAndPassword(email, password) .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { if (task.isSuccessful()) { // Sign in success, update UI with the signed-in user's information Log.d(TAG, "createUserWithEmail:success"); FirebaseUser user = mAuth.getCurrentUser(); updateUI(user); } else { // If sign in fails, display a message to the user. Log.w(TAG, "createUserWithEmail:failure", task.getException()); Toast.makeText(EmailPasswordActivity.this, "Authentication failed.", Toast.LENGTH_SHORT).show(); updateUI(null); } } });
getCurrentUser
per ottenere i dati dell'account dell'utente.
Accedere come utente con un indirizzo email e una password
I passaggi per accedere con una password sono simili a quelli per creare un nuovo account. Nell'attività di accesso della tua app, procedi nel seguente modo:
- Nel metodo
onCreate
dell'attività di accesso, recupera l'istanza condivisa dell'oggettoFirebaseAuth
:Kotlin
private lateinit var auth: FirebaseAuth // ... // Initialize Firebase Auth auth = Firebase.auth
Java
private FirebaseAuth mAuth; // ... // Initialize Firebase Auth mAuth = FirebaseAuth.getInstance();
- Quando inizializzi l'attività, controlla se l'utente ha eseguito l'accesso:
Kotlin
public override fun onStart() { super.onStart() // Check if user is signed in (non-null) and update UI accordingly. val currentUser = auth.currentUser if (currentUser != null) { reload() } }
Java
@Override public void onStart() { super.onStart(); // Check if user is signed in (non-null) and update UI accordingly. FirebaseUser currentUser = mAuth.getCurrentUser(); if(currentUser != null){ reload(); } }
- Quando un utente accede alla tua app, trasmetti il suo indirizzo email e la sua password a
signInWithEmailAndPassword
:Kotlin
auth.signInWithEmailAndPassword(email, password) .addOnCompleteListener(this) { task -> if (task.isSuccessful) { // Sign in success, update UI with the signed-in user's information Log.d(TAG, "signInWithEmail:success") val user = auth.currentUser updateUI(user) } else { // If sign in fails, display a message to the user. Log.w(TAG, "signInWithEmail:failure", task.exception) Toast.makeText( baseContext, "Authentication failed.", Toast.LENGTH_SHORT, ).show() updateUI(null) } }
Java
mAuth.signInWithEmailAndPassword(email, password) .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { if (task.isSuccessful()) { // Sign in success, update UI with the signed-in user's information Log.d(TAG, "signInWithEmail:success"); FirebaseUser user = mAuth.getCurrentUser(); updateUI(user); } else { // If sign in fails, display a message to the user. Log.w(TAG, "signInWithEmail:failure", task.getException()); Toast.makeText(EmailPasswordActivity.this, "Authentication failed.", Toast.LENGTH_SHORT).show(); updateUI(null); } } });
FirebaseUser
restituito per procedere.
Consigliato: imposta un criterio per le password
Puoi migliorare la sicurezza degli account applicando i requisiti di complessità delle password.
Per configurare un criterio per le password per il tuo progetto, apri la scheda Criterio per le password nella pagina Impostazioni di autenticazione della console Firebase:
Impostazioni di autenticazione
I criteri per le password di Firebase Authentication supportano i seguenti requisiti per le password:
È richiesto un carattere minuscolo
È richiesto un carattere maiuscolo
È necessario un carattere numerico
È richiesto un carattere non alfanumerico
I seguenti caratteri soddisfano il requisito dei caratteri non alfanumerici:
^ $ * . [ ] { } ( ) ? " ! @ # % & / \ , > < ' : ; | _ ~
Lunghezza minima della password (da 6 a 30 caratteri; il valore predefinito è 6)
Lunghezza massima della password (massimo 4096 caratteri)
Puoi attivare l'applicazione forzata dei criteri relativi alle password in due modalità:
Richiedi: i tentativi di registrazione non vanno a buon fine finché l'utente non aggiorna una password conforme ai criteri.
Notifica: gli utenti possono registrarsi con una password non conforme. Quando utilizzi questa modalità, devi verificare se la password dell'utente è conforme alle norme lato client e chiedere all'utente di aggiornare la password se non è conforme.
I nuovi utenti sono sempre tenuti a scegliere una password conforme alle tue norme.
Se hai utenti attivi, ti consigliamo di non attivare l'upgrade forzato all'accesso a meno che tu non intenda bloccare l'accesso agli utenti le cui password non rispettano i tuoi criteri. Utilizza invece la modalità di notifica, che consente agli utenti di accedere con le password attuali e li informa dei requisiti mancanti della password.
Consigliato: attiva la protezione da enumerazione email
Alcuni metodi Firebase Authentication che accettano indirizzi email come parametri generano errori specifici se l'indirizzo email non è registrato quando deve esserlo (ad esempio, quando si accede con un indirizzo email e una password) o registrato quando deve essere inutilizzato (ad esempio, quando si modifica l'indirizzo email di un utente). Sebbene possa essere utile per suggerire rimedi specifici agli utenti, può anche essere utilizzato in modo illecito da malintenzionati per scoprire gli indirizzi email registrati dai tuoi utenti.
Per ridurre questo rischio, ti consigliamo di attivare la protezione dall'enumerazione delle email
per il tuo progetto utilizzando lo strumento gcloud
di Google Cloud. Tieni presente che l'attivazione di questa
funzionalità modifica il comportamento di segnalazione degli errori di Firebase Authentication: assicurati che la tua app
non si basi sugli errori più specifici.
Passaggi successivi
Dopo che un utente ha eseguito l'accesso per la prima volta, viene creato un nuovo account utente e collegato alle credenziali, ovvero nome utente e password, numero di telefono o informazioni del fornitore di autenticazione, con cui l'utente ha eseguito l'accesso. 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, puoi ottenere le informazioni di base del profilo dell'utente dall'oggetto
FirebaseUser
. Vedi 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 a quali dati può accedere un utente.
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
:
Kotlin
Firebase.auth.signOut()
Java
FirebaseAuth.getInstance().signOut();