Puoi utilizzare Firebase Authentication per consentire agli utenti di eseguire l'autenticazione con Firebase utilizzando i loro indirizzi email e le loro password e per gestire gli account basati su password della tua app.
Prima di iniziare
Se non l'hai già fatto, aggiungi Firebase al tuo progetto Android.
- Se non hai ancora collegato l'app al progetto Firebase, fallo dalla console Firebase.
- Attiva l'accesso con email/password:
- Nella console Firebase, apri la sezione Auth.
- Nella scheda Metodo di accesso, attiva il metodo di accesso Email/password e fai clic su Salva.
Nel file Gradle del modulo (a livello di app) (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 delle librerie.dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:33.5.1")) // 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") }
Con Firebase Android BoM, la tua app utilizzerà sempre versioni compatibili delle librerie Firebase per Android.
(Alternativa) Aggiungi le dipendenze della libreria Firebase senza utilizzare il file BoM
Se scegli di non utilizzare Firebase BoM, devi specificare ogni versione della libreria Firebase nella relativa riga di dipendenza.
Tieni presente che se nella tua app utilizzi più librerie Firebase, ti consigliamo vivamente di utilizzare 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:23.1.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+KTX
private lateinit var auth: FirebaseAuth // ... // Initialize Firebase Auth auth = Firebase.auth
Java
private FirebaseAuth mAuth; // ... // Initialize Firebase Auth mAuth = FirebaseAuth.getInstance();
- Quando inizializzazione l'attività, controlla se l'utente ha eseguito l'accesso:
Kotlin+KTX
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 passaggi di convalida del nuovo 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+KTX
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 recuperare i dati dell'account dell'utente.
Accedere a un utente con un indirizzo email e una password
I passaggi per far accedere un utente 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+KTX
private lateinit var auth: FirebaseAuth // ... // Initialize Firebase Auth auth = Firebase.auth
Java
private FirebaseAuth mAuth; // ... // Initialize Firebase Auth mAuth = FirebaseAuth.getInstance();
- Quando inizializzazione l'attività, controlla se l'utente ha eseguito l'accesso:
Kotlin+KTX
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, passa l'indirizzo email e la password dell'utente a
signInWithEmailAndPassword
:Kotlin+KTX
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 continuare.
(Consigliato) Imposta un criterio per le password
Puoi migliorare la sicurezza dell'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:
È necessario un carattere minuscolo
È necessario un carattere maiuscolo
È necessario un carattere numerico
È richiesto un carattere non alfanumerico
I seguenti caratteri soddisfano il requisito del carattere non alfanumerico:
^ $ * . [ ] { } ( ) ? " ! @ # % & / \ , > < ' : ; | _ ~
Lunghezza minima della password (da 6 a 30 caratteri; il valore predefinito è 6)
Lunghezza massima della password (lunghezza massima di 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 tuoi criteri.
Invia una notifica: gli utenti possono registrarsi con una password non conforme. Quando utilizzi questa modalità, devi verificare se la password dell'utente è conforme ai criteri lato client e chiedere all'utente in qualche modo 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 abilitare l'opzione Forza l'upgrade all'accesso, a meno che tu non intenda bloccare l'accesso degli utenti le cui password non sono conformi ai tuoi criteri. Utilizza invece la modalità di notifica, che consente agli utenti di accedere con le loro password attuali e di informarli dei requisiti mancanti per la 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 accedi con un indirizzo email e una password) o se è registrato quando deve essere inutilizzato (ad esempio, quando modifichi l'indirizzo email di un utente). Questo può essere utile per suggerire rimedi specifici agli utenti, ma può anche essere utilizzato in modo illecito da malintenzionati per scoprire gli indirizzi email registrati dagli utenti.
Per ridurre questo rischio, ti consigliamo di attivare la protezione per l'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 generazione di report sugli 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 archiviato come parte del progetto Firebase e può essere utilizzato per identificare un utente in ogni app del progetto, indipendentemente da come l'utente esegue l'accesso.
-
Nelle tue app, puoi recuperare le informazioni di base del profilo dell'utente dall'oggetto
FirebaseUser
. Vedi Gestire gli utenti. Nelle Regole di sicurezza Firebase Realtime Database e Cloud Storage, puoi recuperare 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 scollegare un utente, chiama
signOut
:
Kotlin+KTX
Firebase.auth.signOut()
Java
FirebaseAuth.getInstance().signOut();