Firebase Summit에서 발표된 모든 내용을 살펴보고 Firebase로 앱을 빠르게 개발하고 안심하고 앱을 실행하는 방법을 알아보세요. 자세히 알아보기

Firebase에서 사용자 관리

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

사용자 만들기

createUserWithEmailAndPassword 메서드를 호출하거나 Google Sign-In 또는 Facebook 로그인 과 같은 연합 ID 공급자를 사용하여 처음으로 사용자를 로그인하여 Firebase 프로젝트에서 새 사용자를 만듭니다.

사용자 페이지에 있는 Firebase 콘솔 의 인증 섹션에서 비밀번호로 인증된 새 사용자를 생성할 수도 있습니다.

현재 로그인한 사용자 가져오기

현재 사용자를 얻는 데 권장되는 방법은 getCurrentUser 메서드를 호출하는 것입니다. 로그인한 사용자가 없으면 getCurrentUser 는 null을 반환합니다.

Java

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
}

getCurrentUser 가 null이 아닌 FirebaseUser 를 반환하지만 기본 토큰이 유효하지 않은 경우가 있습니다. 예를 들어, 사용자가 다른 장치에서 삭제되었고 로컬 토큰이 새로 고쳐지지 않은 경우에 발생할 수 있습니다. 이 경우 유효한 사용자 getCurrentUser 를 얻을 수 있지만 인증된 리소스에 대한 후속 호출은 실패합니다.

auth 개체가 초기화를 완료하지 않았기 때문에 getCurrentUsernull 을 반환할 수도 있습니다.

AuthStateListener 를 연결하면 기본 토큰 상태가 변경될 때마다 콜백을 받게 됩니다. 이것은 위에서 언급한 것과 같은 극단적인 경우에 대응하는 데 유용할 수 있습니다.

사용자 프로필 가져오기

사용자의 프로필 정보를 가져오려면 FirebaseUser 인스턴스의 접근자 메서드를 사용합니다. 예를 들어:

Java

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
}

사용자의 공급자별 프로필 정보 가져오기

사용자와 연결된 로그인 공급자로부터 프로필 정보를 가져오려면 getProviderData 메서드를 사용합니다. 예를 들어:

Java

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
    }
}

사용자 프로필 업데이트

updateProfile 메소드를 사용하여 사용자의 기본 프로필 정보(사용자의 표시 이름 및 프로필 사진 URL)를 업데이트할 수 있습니다. 예를 들어:

Java

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.")
            }
        }

사용자의 이메일 주소 설정

updateEmail 메소드를 사용하여 사용자의 이메일 주소를 설정할 수 있습니다. 예를 들어:

Java

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.")
            }
        }

사용자에게 확인 이메일 보내기

sendEmailVerification 메소드를 사용하여 사용자에게 주소 확인 이메일을 보낼 수 있습니다. 예를 들어:

Java

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.")
            }
        }

이메일 템플릿 페이지에서 Firebase 콘솔 의 인증 섹션에서 사용되는 이메일 템플릿을 맞춤설정할 수 있습니다. Firebase 도움말 센터에서 이메일 템플릿 을 참조하세요.

확인 이메일을 보낼 때 앱으로 다시 리디렉션하기 위해 계속 URL 을 통해 상태를 전달할 수도 있습니다.

또한 이메일을 보내기 전에 인증 인스턴스의 언어 코드를 업데이트하여 확인 이메일을 현지화할 수 있습니다. 예를 들어:

Java

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()

사용자 비밀번호 설정

updatePassword 메소드를 사용하여 사용자의 비밀번호를 설정할 수 있습니다. 예를 들어:

Java

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.")
            }
        }

비밀번호 재설정 이메일 보내기

sendPasswordResetEmail 메소드를 사용하여 사용자에게 비밀번호 재설정 이메일을 보낼 수 있습니다. 예를 들어:

Java

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.")
            }
        }

이메일 템플릿 페이지에서 Firebase 콘솔 의 인증 섹션에서 사용되는 이메일 템플릿을 맞춤설정할 수 있습니다. Firebase 도움말 센터에서 이메일 템플릿 을 참조하세요.

비밀번호 재설정 이메일을 보낼 때 앱으로 다시 리디렉션하기 위해 계속 URL 을 통해 상태를 전달할 수도 있습니다.

또한 이메일을 보내기 전에 인증 인스턴스의 언어 코드를 업데이트하여 비밀번호 재설정 이메일을 현지화할 수 있습니다. 예를 들어:

Java

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()

Firebase 콘솔에서 비밀번호 재설정 이메일을 보낼 수도 있습니다.

사용자 삭제

delete 방법으로 사용자 계정을 삭제할 수 있습니다. 예를 들어:

Java

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.")
            }
        }

사용자 페이지에 있는 Firebase 콘솔 의 인증 섹션에서 사용자를 삭제할 수도 있습니다.

사용자 재인증

계정 삭제 , 기본 이메일 주소 설정암호 변경 과 같은 일부 보안에 민감한 작업을 수행하려면 사용자가 최근에 로그인해야 합니다. 이러한 작업 중 하나를 수행하고 사용자가 너무 오래 전에 로그인한 경우 작업이 실패하고 FirebaseAuthRecentLoginRequiredException 이 발생합니다. 이 경우 사용자로부터 새 로그인 자격 증명을 받고 자격 증명을 reauthenticate 에 전달하여 사용자를 다시 인증합니다. 예를 들어:

Java

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.") }

사용자 계정 가져오기

Firebase CLI의 auth:import 명령을 사용하여 파일에서 Firebase 프로젝트로 사용자 계정을 가져올 수 있습니다. 예를 들어:

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