사용자 만들기
createUserWithEmailAndPassword
메서드를 호출하거나 Google 로그인 또는 Facebook 로그인 과 같은 제휴 ID 공급업체를 사용하여 처음으로 사용자를 로그인하여 Firebase 프로젝트에서 새 사용자를 만듭니다.
사용자 페이지에 있는 Firebase 콘솔 의 인증 섹션에서 비밀번호로 인증된 새 사용자를 만들 수도 있습니다.
현재 로그인한 사용자 가져오기
현재 사용자를 가져오는 권장 방법은 getCurrentUser
메서드를 호출하는 것입니다. 로그인한 사용자가 없으면 getCurrentUser
는 null을 반환합니다.
Kotlin+KTX
val user = Firebase.auth.currentUser if (user != null) { // User is signed in } else { // No user is signed in }
Java
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); if (user != null) { // User is signed in } else { // No user is signed in }
getCurrentUser
가 null이 아닌 FirebaseUser
를 반환하지만 기본 토큰이 유효하지 않은 경우가 있습니다. 예를 들어 사용자가 다른 장치에서 삭제되었고 로컬 토큰이 새로 고쳐지지 않은 경우에 이러한 상황이 발생할 수 있습니다. 이 경우 유효한 사용자 getCurrentUser
를 얻을 수 있지만 인증된 리소스에 대한 후속 호출은 실패합니다.
인증 개체가 초기화를 완료하지 않았기 때문에 getCurrentUser
가 null
을 반환할 수도 있습니다.
AuthStateListener 를 연결하면 기본 토큰 상태가 변경될 때마다 콜백을 받게 됩니다. 이는 위에서 언급한 것과 같은 엣지 케이스에 대응하는 데 유용할 수 있습니다.
사용자 프로필 가져오기
사용자 프로필 정보를 가져오려면 FirebaseUser
인스턴스의 접근자 메서드를 사용하세요. 예를 들어:
Kotlin+KTX
val user = Firebase.auth.currentUser user?.let { // Name, email address, and profile photo Url val name = it.displayName val email = it.email val photoUrl = it.photoUrl // Check if user's email is verified val emailVerified = it.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. val uid = it.uid }
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(); }
사용자의 공급자별 프로필 정보 가져오기
사용자에게 연결된 로그인 공급자에서 검색된 프로필 정보를 가져오려면 getProviderData
메서드를 사용합니다. 예를 들어:
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 } }
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(); } }
사용자 프로필 업데이트
updateProfile
메서드를 사용하여 사용자의 기본 프로필 정보(사용자의 표시 이름 및 프로필 사진 URL)를 업데이트할 수 있습니다. 예를 들어:
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.") } }
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."); } } });
사용자의 이메일 주소 설정
updateEmail
메소드로 사용자의 이메일 주소를 설정할 수 있습니다. 예를 들어:
Kotlin+KTX
val user = Firebase.auth.currentUser user!!.updateEmail("user@example.com") .addOnCompleteListener { task -> if (task.isSuccessful) { Log.d(TAG, "User email address updated.") } }
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."); } } });
사용자에게 확인 이메일 보내기
sendEmailVerification
메소드를 사용하여 주소 확인 이메일을 사용자에게 보낼 수 있습니다. 예를 들어:
Kotlin+KTX
val user = Firebase.auth.currentUser user!!.sendEmailVerification() .addOnCompleteListener { task -> if (task.isSuccessful) { Log.d(TAG, "Email sent.") } }
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."); } } });
이메일 템플릿 페이지에서 Firebase 콘솔 의 인증 섹션에 사용되는 이메일 템플릿을 맞춤설정할 수 있습니다. Firebase 도움말 센터에서 이메일 템플릿 을 참조하세요.
확인 이메일을 보낼 때 계속 URL 을 통해 상태를 전달하여 앱으로 다시 리디렉션할 수도 있습니다.
또한 이메일을 보내기 전에 Auth 인스턴스에서 언어 코드를 업데이트하여 확인 이메일을 현지화할 수 있습니다. 예를 들어:
Kotlin+KTX
auth.setLanguageCode("fr") // To apply the default app language instead of explicitly setting it. // auth.useAppLanguage()
Java
auth.setLanguageCode("fr"); // To apply the default app language instead of explicitly setting it. // auth.useAppLanguage();
사용자 비밀번호 설정
updatePassword
메소드로 사용자 비밀번호를 설정할 수 있습니다. 예를 들어:
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.") } }
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."); } } });
비밀번호 재설정 이메일 보내기
sendPasswordResetEmail
메소드를 사용하여 비밀번호 재설정 이메일을 사용자에게 보낼 수 있습니다. 예를 들어:
Kotlin+KTX
val emailAddress = "user@example.com" Firebase.auth.sendPasswordResetEmail(emailAddress) .addOnCompleteListener { task -> if (task.isSuccessful) { Log.d(TAG, "Email sent.") } }
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."); } } });
이메일 템플릿 페이지에서 Firebase 콘솔 의 인증 섹션에 사용되는 이메일 템플릿을 맞춤설정할 수 있습니다. Firebase 도움말 센터에서 이메일 템플릿 을 참조하세요.
비밀번호 재설정 이메일을 보낼 때 계속 URL 을 통해 상태를 전달하여 앱으로 다시 리디렉션할 수도 있습니다.
또한 이메일을 보내기 전에 Auth 인스턴스에서 언어 코드를 업데이트하여 비밀번호 재설정 이메일을 현지화할 수 있습니다. 예를 들어:
Kotlin+KTX
auth.setLanguageCode("fr") // To apply the default app language instead of explicitly setting it. // auth.useAppLanguage()
Java
auth.setLanguageCode("fr"); // To apply the default app language instead of explicitly setting it. // auth.useAppLanguage();
Firebase 콘솔에서 비밀번호 재설정 이메일을 보낼 수도 있습니다.
사용자 삭제
delete
메소드로 사용자 계정을 삭제할 수 있습니다. 예를 들어:
Kotlin+KTX
val user = Firebase.auth.currentUser!! user.delete() .addOnCompleteListener { task -> if (task.isSuccessful) { Log.d(TAG, "User account deleted.") } }
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."); } } });
사용자 페이지에 있는 Firebase 콘솔 의 인증 섹션에서 사용자를 삭제할 수도 있습니다.
사용자 재인증
계정 삭제 , 기본 이메일 주소 설정 및 암호 변경 과 같은 일부 보안에 민감한 작업을 수행하려면 사용자가 최근에 로그인해야 합니다. 이러한 작업 중 하나를 수행하고 사용자가 너무 오래 전에 로그인한 경우 작업이 실패하고 FirebaseAuthRecentLoginRequiredException
이 발생합니다. 이 경우 사용자로부터 새 로그인 자격 증명을 받고 자격 증명을 reauthenticate
에 전달하여 사용자를 다시 인증합니다. 예를 들어:
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.") }
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."); } });
사용자 계정 가져오기
Firebase CLI의 auth:import
명령을 사용하여 파일에서 Firebase 프로젝트로 사용자 계정을 가져올 수 있습니다. 예를 들어:
firebase auth:import users.json --hash-algo=scrypt --rounds=8 --mem-cost=14