Zarządzaj użytkownikami w Firebase

Utwórz użytkownika

Aby utworzyć nowego użytkownika w projekcie Firebase wywołując createUserWithEmailAndPassword metodę lub logując się użytkownik po raz pierwszy za pomocą stowarzyszonego dostawcy tożsamości, takich jak logowania Google lub Facebook login .

Można również tworzyć nowych użytkowników hasłami uwierzytelnione z sekcji Uwierzytelnianie na konsoli Firebase na stronie Użytkownicy.

Uzyskaj aktualnie zalogowanego użytkownika

Zalecanym sposobem uzyskania bieżącego użytkownika jest poprzez wywołanie getCurrentUser metody. Jeśli żaden użytkownik nie jest zalogowany, getCurrentUser zwraca NULL:

Jawa

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
if (user != null) {
    // User is signed in
} else {
    // No user is signed in
}

Kotlin+KTX

val user = Firebase.auth.currentUser
if (user != null) {
    // User is signed in
} else {
    // No user is signed in
}

Istnieją przypadki, w których getCurrentUser zwróci niezerowe FirebaseUser ale podstawowa żeton nie jest prawidłowy. Może się to zdarzyć na przykład, jeśli użytkownik został usunięty na innym urządzeniu, a token lokalny nie został odświeżony. W tym przypadku, można uzyskać prawidłową użytkownika getCurrentUser ale kolejne wywołania do uwierzytelnionych zasobów zawiedzie.

getCurrentUser może również zwrócić null , ponieważ obiekt auth nie zakończył inicjalizacji.

Jeśli dołączyć AuthStateListener dostaniesz zwrotnego za każdym razem bazowe symboliczne zmiany stanu. Może to być przydatne do reagowania na przypadki brzegowe, takie jak te wymienione powyżej.

Uzyskaj profil użytkownika

Aby uzyskać informacje o profilu użytkownika, należy użyć metody dostępowe o wystąpieniu FirebaseUser . Na przykład:

Jawa

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
if (user != null) {
    // Name, email address, and profile photo Url
    String name = user.getDisplayName();
    String email = user.getEmail();
    Uri photoUrl = user.getPhotoUrl();

    // Check if user's email is verified
    boolean emailVerified = user.isEmailVerified();

    // The user's ID, unique to the Firebase project. Do NOT use this value to
    // authenticate with your backend server, if you have one. Use
    // FirebaseUser.getIdToken() instead.
    String uid = user.getUid();
}

Kotlin+KTX

val user = Firebase.auth.currentUser
user?.let {
    // Name, email address, and profile photo Url
    val name = user.displayName
    val email = user.email
    val photoUrl = user.photoUrl

    // Check if user's email is verified
    val emailVerified = user.isEmailVerified

    // The user's ID, unique to the Firebase project. Do NOT use this value to
    // authenticate with your backend server, if you have one. Use
    // FirebaseUser.getToken() instead.
    val uid = user.uid
}

Uzyskaj informacje o profilu dostawcy specyficzne dla użytkownika

Aby uzyskać informacje o profilu pobrane z logowania dostawców powiązanych z użytkownikiem, należy użyć getProviderData metody. Na przykład:

Jawa

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
if (user != null) {
    for (UserInfo profile : user.getProviderData()) {
        // Id of the provider (ex: google.com)
        String providerId = profile.getProviderId();

        // UID specific to the provider
        String uid = profile.getUid();

        // Name, email address, and profile photo Url
        String name = profile.getDisplayName();
        String email = profile.getEmail();
        Uri photoUrl = profile.getPhotoUrl();
    }
}

Kotlin+KTX

val user = Firebase.auth.currentUser
user?.let {
    for (profile in it.providerData) {
        // Id of the provider (ex: google.com)
        val providerId = profile.providerId

        // UID specific to the provider
        val uid = profile.uid

        // Name, email address, and profile photo Url
        val name = profile.displayName
        val email = profile.email
        val photoUrl = profile.photoUrl
    }
}

Zaktualizuj profil użytkownika

Można zaktualizować autora informacyjne Podstawowym profilem użytkownika wyświetlaną nazwę i zdjęcie profilowe URL z updateProfile metody. Na przykład:

Jawa

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();

UserProfileChangeRequest profileUpdates = new UserProfileChangeRequest.Builder()
        .setDisplayName("Jane Q. User")
        .setPhotoUri(Uri.parse("https://example.com/jane-q-user/profile.jpg"))
        .build();

user.updateProfile(profileUpdates)
        .addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                if (task.isSuccessful()) {
                    Log.d(TAG, "User profile updated.");
                }
            }
        });

Kotlin+KTX

val user = Firebase.auth.currentUser

val profileUpdates = userProfileChangeRequest {
    displayName = "Jane Q. User"
    photoUri = Uri.parse("https://example.com/jane-q-user/profile.jpg")
}

user!!.updateProfile(profileUpdates)
        .addOnCompleteListener { task ->
            if (task.isSuccessful) {
                Log.d(TAG, "User profile updated.")
            }
        }

Ustaw adres e-mail użytkownika

Można ustawić adres e-mail użytkownika z updateEmail metody. Na przykład:

Jawa

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();

user.updateEmail("user@example.com")
        .addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                if (task.isSuccessful()) {
                    Log.d(TAG, "User email address updated.");
                }
            }
        });

Kotlin+KTX

val user = Firebase.auth.currentUser

user!!.updateEmail("user@example.com")
        .addOnCompleteListener { task ->
            if (task.isSuccessful) {
                Log.d(TAG, "User email address updated.")
            }
        }

Wyślij użytkownikowi e-mail weryfikacyjny

Można wysłać e-mail weryfikacyjny adres do użytkownika z sendEmailVerification metody. Na przykład:

Jawa

FirebaseAuth auth = FirebaseAuth.getInstance();
FirebaseUser user = auth.getCurrentUser();

user.sendEmailVerification()
        .addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                if (task.isSuccessful()) {
                    Log.d(TAG, "Email sent.");
                }
            }
        });

Kotlin+KTX

val user = Firebase.auth.currentUser

user!!.sendEmailVerification()
        .addOnCompleteListener { task ->
            if (task.isSuccessful) {
                Log.d(TAG, "Email sent.")
            }
        }

Można dostosować szablon e-mail, który jest używany w sekcji Uwierzytelnianie na konsoli Firebase , na stronie E-mail Szablony. Zobacz Szablony Email w Firebase Centrum pomocy.

Możliwe jest również, aby przejść stanu za pośrednictwem kontynuować URL przekierowanie z powrotem do aplikacji przy wysyłaniu e-maila weryfikacyjnego.

Dodatkowo możesz zlokalizować e-mail weryfikacyjny, aktualizując kod języka w instancji Auth przed wysłaniem e-maila. Na przykład:

Jawa

auth.setLanguageCode("fr");
// To apply the default app language instead of explicitly setting it.
// auth.useAppLanguage();

Kotlin+KTX

auth.setLanguageCode("fr")
// To apply the default app language instead of explicitly setting it.
// auth.useAppLanguage()

Ustaw hasło użytkownika

Można ustawić hasło użytkownika z updatePassword metody. Na przykład:

Jawa

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
String newPassword = "SOME-SECURE-PASSWORD";

user.updatePassword(newPassword)
        .addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                if (task.isSuccessful()) {
                    Log.d(TAG, "User password updated.");
                }
            }
        });

Kotlin+KTX

val user = Firebase.auth.currentUser
val newPassword = "SOME-SECURE-PASSWORD"

user!!.updatePassword(newPassword)
        .addOnCompleteListener { task ->
            if (task.isSuccessful) {
                Log.d(TAG, "User password updated.")
            }
        }

Wyślij wiadomość e-mail umożliwiającą zresetowanie hasła

Można wysłać e-mail do resetowania hasła użytkownika z sendPasswordResetEmail metody. Na przykład:

Jawa

FirebaseAuth auth = FirebaseAuth.getInstance();
String emailAddress = "user@example.com";

auth.sendPasswordResetEmail(emailAddress)
        .addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                if (task.isSuccessful()) {
                    Log.d(TAG, "Email sent.");
                }
            }
        });

Kotlin+KTX

val emailAddress = "user@example.com"

Firebase.auth.sendPasswordResetEmail(emailAddress)
        .addOnCompleteListener { task ->
            if (task.isSuccessful) {
                Log.d(TAG, "Email sent.")
            }
        }

Można dostosować szablon e-mail, który jest używany w sekcji Uwierzytelnianie na konsoli Firebase , na stronie E-mail Szablony. Zobacz Szablony Email w Firebase Centrum pomocy.

Możliwe jest również, aby przejść stanu za pośrednictwem kontynuować URL przekierowanie z powrotem do aplikacji przy wysyłaniu wiadomości e-mail resetowania hasła.

Dodatkowo możesz zlokalizować wiadomość e-mail dotyczącą resetowania hasła, aktualizując kod języka w instancji Auth przed wysłaniem wiadomości e-mail. Na przykład:

Jawa

auth.setLanguageCode("fr");
// To apply the default app language instead of explicitly setting it.
// auth.useAppLanguage();

Kotlin+KTX

auth.setLanguageCode("fr")
// To apply the default app language instead of explicitly setting it.
// auth.useAppLanguage()

Możesz też wysyłać e-maile dotyczące resetowania hasła z konsoli Firebase.

Usuń użytkownika

Można usunąć konto użytkownika z delete metody. Na przykład:

Jawa

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();

user.delete()
        .addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                if (task.isSuccessful()) {
                    Log.d(TAG, "User account deleted.");
                }
            }
        });

Kotlin+KTX

val user = Firebase.auth.currentUser!!

user.delete()
        .addOnCompleteListener { task ->
            if (task.isSuccessful) {
                Log.d(TAG, "User account deleted.")
            }
        }

Można także usuwać użytkowników z sekcji Uwierzytelnianie na konsoli Firebase , na stronie Użytkownicy.

Ponownie uwierzytelnij użytkownika

Niektóre zabezpieczenia wrażliwych działania, takie jak usunięcie konta , wyznaczając podstawowy adres e-mail , a zmiana hasła -require że użytkownik ostatnio zalogowany. Jeśli wykonać jedno z tych działań, a użytkownik podpisany w zbyt dawno temu, akcja nie powiodła się i rzuca FirebaseAuthRecentLoginRequiredException . Kiedy to nastąpi, ponownego uwierzytelnienia użytkownika poprzez uzyskiwanie nowych logowania poświadczeń od użytkownika i przekazywanie poświadczeń do reauthenticate . Na przykład:

Jawa

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();

// Get auth credentials from the user for re-authentication. The example below shows
// email and password credentials but there are multiple possible providers,
// such as GoogleAuthProvider or FacebookAuthProvider.
AuthCredential credential = EmailAuthProvider
        .getCredential("user@example.com", "password1234");

// Prompt the user to re-provide their sign-in credentials
user.reauthenticate(credential)
        .addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                Log.d(TAG, "User re-authenticated.");
            }
        });

Kotlin+KTX

val user = Firebase.auth.currentUser!!

// Get auth credentials from the user for re-authentication. The example below shows
// email and password credentials but there are multiple possible providers,
// such as GoogleAuthProvider or FacebookAuthProvider.
val credential = EmailAuthProvider
        .getCredential("user@example.com", "password1234")

// Prompt the user to re-provide their sign-in credentials
user.reauthenticate(credential)
        .addOnCompleteListener { Log.d(TAG, "User re-authenticated.") }

Importuj konta użytkowników

Można zaimportować konta użytkowników z pliku do projektu Firebase za pomocą tego Firebase CLI za auth:import polecenia. Na przykład:

firebase auth:import users.json --hash-algo=scrypt --rounds=8 --mem-cost=14