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 la tua app al tuo progetto Firebase, fallo da Firebase console.
-
Attiva Email/Password come provider di accesso per il tuo progetto Firebase:
- Nella console Firebase, vai a Sicurezza > Autenticazione.
- Nella scheda Metodo di accesso, attiva il provider di accesso Email/password.
- Fai clic su Salva.
Nel file Gradle del modulo (a livello di app) (di solito
<project>/<app-module>/build.gradle.ktso<project>/<app-module>/build.gradle), aggiungi la dipendenza per la libreria Firebase Authentication per Android. Ti consigliamo di utilizzare la 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.13.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") }
Con la Firebase Android BoM, la tua app utilizzerà sempre versioni compatibili delle librerie Firebase Android.
(Alternativa) Aggiungere dipendenze della libreria Firebase senza utilizzare la BoM
Se scegli di non utilizzare la Firebase BoM, devi specificare la versione di ogni libreria Firebase nella riga di 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 che tutte le versioni siano compatibili.
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.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
onCreatedell'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 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:Se il nuovo account è stato creato, l'utente ha anche eseguito l'accesso. Nel callback, puoi utilizzare il metodoKotlin
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); } } });
getCurrentUserper recuperare i dati dell'account dell'utente.
Accedere a un utente con un indirizzo email e una password
I passaggi per accedere a 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
onCreatedell'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, passa l'indirizzo email e
la password dell'utente a
signInWithEmailAndPassword:Se l'accesso è andato a buon fine, puoi utilizzareKotlin
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); } } });
FirebaseUserrestituito per procedere.
(Consigliato) Impostare un criterio relativo alle password
Puoi migliorare la sicurezza degli account applicando i requisiti di complessità delle password.
Per configurare un criterio relativo alle password per il tuo progetto, apri la sezione Criteri relativi alle password nella scheda Sicurezza > Autenticazione > Impostazioni della Firebase console:
Impostazioni di autenticazione
Firebase Authentication criteri relativi alle password supportano i seguenti requisiti per le password:
Carattere minuscolo obbligatorio
Carattere maiuscolo obbligatorio
Carattere numerico obbligatorio
Carattere non alfanumerico obbligatorio
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 (lunghezza massima di 4096 caratteri)
Puoi attivare l'applicazione dei criteri relativi alle password in due modalità:
Richiedi: i tentativi di accesso 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 ai criteri sul lato client e chiedere all'utente di aggiornare la password se non è conforme.
I nuovi utenti sono sempre tenuti a scegliere una password conforme ai tuoi criteri.
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 sono conformi ai 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) Attivare 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 essere registrato (ad esempio, quando si accede con un indirizzo email e una password) o registrato quando non deve essere utilizzato (ad esempio, quando si modifica l'indirizzo email di un utente). Sebbene questo possa essere utile per suggerire rimedi specifici agli utenti, 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 da enumerazione 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 collegato alle credenziali, ovvero al nome utente e alla password, al numero di telefono o alle informazioni del provider 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 dell'utente.
-
Nelle tue app, puoi recuperare le informazioni di base del profilo dell'utente dall'
FirebaseUseroggetto. Consulta Gestire gli utenti. Nelle Firebase Realtime Database e Cloud Storage Regole di sicurezza, puoi recuperare 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:
Kotlin
Firebase.auth.signOut()
Java
FirebaseAuth.getInstance().signOut();