Firebase 인증
이메일과 Google 로그인 기능을 구현합니다.
Firebase 인증은(는) CoddyKit의 무료 Android Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Android Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Android Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
Firebase Auth를 사용하는 이유
Firebase Authentication은 안전한 비밀번호 저장, 토큰 갱신, 계정 복구, 다양한 제공업체(이메일, Google, Apple, 전화번호, 익명)를 통한 로그인 등 사용자 로그인에 필요한 복잡한 작업을 처리합니다.
로그인 서버를 직접 구축하는 대신 몇 가지 API를 호출해 인증된 FirebaseUser를 받을 수 있습니다. 이 레슨에서는 이메일/비밀번호 로그인과 Google 로그인을 구현합니다.
로그인 방식 활성화
코드를 작성하기 전에 Firebase console에서 사용할 제공업체를 활성화합니다.
- Authentication → Sign-in method로 이동합니다.
- Email/Password를 켭니다.
- Google을 켭니다(지원 이메일을 선택합니다).
Google 로그인을 사용하려면 프로젝트 설정에 앱의 SHA-1 지문도 추가해야 합니다. 그렇지 않으면 개발자 오류로 로그인이 실패합니다.
FirebaseAuth 인스턴스 가져오기
진입점은 Firebase.auth입니다. 이 객체를 통해 현재 사용자에 접근하고 계정 생성, 로그인, 로그아웃 메서드를 사용할 수 있습니다.
로그인한 사용자가 없으면 auth.currentUser는 null입니다. 앱을 시작할 때 어떤 화면을 표시할지 결정하는 간단한 방법으로 사용할 수 있습니다.
import com.google.firebase.Firebase
import com.google.firebase.auth.auth
val auth = Firebase.auth
fun isLoggedIn(): Boolean {
return auth.currentUser != null
}계정 만들기
createUserWithEmailAndPassword로 새 사용자를 등록합니다. 이 함수는 Task를 반환하지만, 코루틴 코드에서는 kotlinx-coroutines-play-services의 await()를 사용해 기다릴 수 있습니다.
성공하면 사용자가 즉시 로그인됩니다.
import com.google.firebase.Firebase
import com.google.firebase.auth.auth
import kotlinx.coroutines.tasks.await
suspend fun register(email: String, password: String): Result<Unit> {
return try {
Firebase.auth
.createUserWithEmailAndPassword(email, password)
.await()
Result.success(Unit)
} catch (e: Exception) {
Result.failure(e)
}
}이메일로 로그인하기
기존 사용자를 로그인시키려면 signInWithEmailAndPassword를 사용합니다. 기본 형태는 회원가입과 같습니다.
호출을 try/catch로 감싸면 잘못된 비밀번호, 존재하지 않는 사용자, 형식이 잘못된 이메일과 같은 오류를 명확하게 표시할 수 있습니다.
import com.google.firebase.Firebase
import com.google.firebase.auth.auth
import com.google.firebase.auth.FirebaseUser
import kotlinx.coroutines.tasks.await
suspend fun login(email: String, password: String): FirebaseUser? {
val result = Firebase.auth
.signInWithEmailAndPassword(email, password)
.await()
return result.user
}Compose로 로그인 화면 만들기
인증 기능을 간단한 Compose 화면에 연결해 보겠습니다. 이메일과 비밀번호를 상태로 관리하고, 코루틴 범위에서 일시 중단 함수를 호출한 다음 오류를 표시합니다.
@Composable
fun LoginScreen(onLoggedIn: () -> Unit) {
var email by remember { mutableStateOf("") }
var password by remember { mutableStateOf("") }
var error by remember { mutableStateOf<String?>(null) }
val scope = rememberCoroutineScope()
Column(Modifier.padding(16.dp)) {
TextField(email, { email = it }, label = { Text("Email") })
TextField(password, { password = it }, label = { Text("Password") })
error?.let { Text(it, color = Color.Red) }
Button(onClick = {
scope.launch {
val user = login(email, password)
if (user != null) onLoggedIn() else error = "Login failed"
}
}) { Text("Sign in") }
}
}현재 사용자 읽기
FirebaseUser에는 사용자의 신원 정보가 들어 있습니다. 여기에는 uid(안정적인 고유 ID), email, displayName, photoUrl이 포함됩니다.
Firestore에 해당 사용자의 데이터를 저장할 때는 uid를 키로 사용합니다. uid는 고유하고 변경되지 않는 값이기 때문입니다.
import com.google.firebase.Firebase
import com.google.firebase.auth.auth
fun describeUser() {
val user = Firebase.auth.currentUser ?: return
println("UID: ${user.uid}")
println("Email: ${user.email}")
println("Name: ${user.displayName ?: "(none)"}")
}인증 상태 관찰하기
인증 상태는 언제든지 변경될 수 있습니다(로그인, 로그아웃, 토큰 갱신). 상태를 반복해서 확인하는 대신 AuthStateListener를 등록해 변경에 반응합니다.
이 방법을 사용하면 로그인 화면과 홈 화면 사이를 자동으로 전환하기에 좋습니다.
import com.google.firebase.Firebase
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.auth.auth
val listener = FirebaseAuth.AuthStateListener { auth ->
val user = auth.currentUser
if (user == null) {
println("Signed out -> show login")
} else {
println("Signed in as ${user.email}")
}
}
// Attach and detach with lifecycle
Firebase.auth.addAuthStateListener(listener)
// Firebase.auth.removeAuthStateListener(listener)Credential Manager로 Google 로그인하기
Google 로그인을 구현하는 최신 방법은 Credential Manager API를 사용하는 것입니다. Google ID 토큰을 요청한 다음, 이를 Firebase 인증 정보로 교환합니다.
핵심 단계는 반환된 ID 토큰으로 GoogleAuthProvider 인증 정보를 만들고 이를 signInWithCredential에 전달하는 것입니다.
import com.google.firebase.Firebase
import com.google.firebase.auth.GoogleAuthProvider
import com.google.firebase.auth.auth
import kotlinx.coroutines.tasks.await
suspend fun firebaseSignInWithGoogle(idToken: String) {
// idToken comes from Credential Manager / Google Identity
val credential = GoogleAuthProvider.getCredential(idToken, null)
Firebase.auth.signInWithCredential(credential).await()
}로그아웃하기
로그아웃은 auth.signOut()을 한 번 호출하면 됩니다. 이 호출은 로컬 사용자 정보를 지우고 인증 상태 리스너를 실행합니다.
Google 로그인에서는 다음에 계정 선택기가 표시되도록 Credential Manager 상태를 지울 수도 있습니다. 로그아웃하면 currentUser는 null이 됩니다.
import com.google.firebase.Firebase
import com.google.firebase.auth.auth
fun logout() {
Firebase.auth.signOut()
// currentUser is now null; your AuthStateListener fires
}인증 오류 처리하기
인증에 실패하면 유형이 지정된 예외가 발생하므로 종류에 따라 처리할 수 있습니다.
FirebaseAuthInvalidUserException— 해당 사용자가 없거나 사용 중지된 경우입니다.FirebaseAuthInvalidCredentialsException— 비밀번호가 틀렸거나 이메일이 잘못된 경우입니다.FirebaseAuthUserCollisionException— 해당 이메일이 이미 등록된 경우입니다.
원시 스택 추적을 그대로 표시하지 말고, 사용자가 이해하기 쉬운 메시지로 변환해 표시합니다.
import com.google.firebase.auth.FirebaseAuthInvalidCredentialsException
import com.google.firebase.auth.FirebaseAuthUserCollisionException
fun messageFor(e: Throwable): String = when (e) {
is FirebaseAuthInvalidCredentialsException -> "Wrong email or password"
is FirebaseAuthUserCollisionException -> "That email is already in use"
else -> "Something went wrong, try again"
}빠른 확인
사용자가 로그인하거나 로그아웃할 때마다 로그인 화면과 홈 화면 사이를 자동으로 전환하려고 합니다. 가장 깔끔한 방법은 무엇일까요?
복습: 인증
이제 Firebase로 사용자를 인증할 수 있습니다.
- 콘솔에서 제공업체를 사용 설정하고 Google용 SHA-1을 추가합니다.
Firebase.auth와createUserWithEmailAndPassword/signInWithEmailAndPassword를 사용합니다.- Google 로그인: ID 토큰을 가져와
GoogleAuthProvider인증 정보를 만들고signInWithCredential을 호출합니다. currentUser로 신원 정보를 읽습니다(데이터 키로uid를 사용합니다).- AuthStateListener로 변경에 반응하고
signOut()으로 로그아웃합니다.
다음 주제: 해당 사용자의 데이터를 Cloud Firestore에 저장하기
자주 묻는 질문
“Firebase 인증” 강의는 무료인가요?
네 — “Firebase 인증” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Android Academy 강의 전체를 잠금 해제할 수 있습니다. Android Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“Firebase 인증”에서 뭘 배우나요?
이메일과 Google 로그인 기능을 구현합니다. 브라우저에서 직접 실행하는 실습 코드로 Android Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Android Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Android Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.
“Firebase 인증” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Android Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Android Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.