본문 바로가기
Android

[Doit 깡샘의 안드로이드 앱 프로그래밍 with 코틀린] 정리 20 - 파이어베이스의 인증

by 들풀민들레 2022. 2. 28.

 

 

본 글은 [Doit 깡샘의 안드로이드 앱 프로그래밍 with 코틀린 - 이지스퍼블리싱 (2022)] 의 내용을 발췌한 것입니다.

좀더 자세한 내용은 책 혹은 인강을 통해 확인해 주세요.

 

 

 

파이어베이스의 인증Authentication 기능은 앱에서 회원가입이나 로그인을 처리할 때 사용합니다. 파이어베이스에서는 이메일/비밀번호 인증을 기본으로 제공하며 이 밖에 구글, 페이스북 등 다양한 업체의 인증과 연동하는 방법도 제공합니다.


이메일/비밀번호 인증


먼저 회원가입을 한다는 가정으로 이메일/비밀번호 인증 처리하는 방법을 살펴보겠습니다. 이메일/비밀번호 인증은 사용자의 회원가입 정보인 이메일/비밀번호를 파이어베이스에 저장하고 이를 바탕으로 로그인을 처리하는 방식입니다.
이때 지메일, 핫메일, 네이버 메일, 다음 메일 등 실제로 존재하는 이메일을 등록해야 합니다. 등록한 이메일로 인증 메일이 자동으로 발송되면 사용자는 이메일 계정에 로그인해 해당 메일을 확인함으로써 인증을 처리하는 구조입니다. 비밀번호는 이메일 계정이 아닌 파이어베이스 연동 시스템에 로그인할 때 사용하는 비밀번호입니다.

 

 

이메일/비밀번호 인증을 거쳐 가입이 완료되면 인증 정보가 파이어베이스에 저장되므로 로그인할 때는 등록된 이메일 서버와 연동하지 않고 파이어베이스에서 처리합니다.

 

이메일/비밀번호 인증 사용 설정하기


이메일/비밀번호로 인증하려면 파이어베이스 콘솔과 앱 모듈의 그래들 설정이 필요합니다. 먼저 파이어베이스 콘솔에 접속한 후 왼쪽 메뉴에서 [Authentication]을 클릭합니다. 그리고 두 번째 탭인 [Sign-in method]에서 이메일/비밀번호 항목이 다음처럼 ‘사용 설정됨’이어야 합니다. 자세한 설정 방법은 「20-4」절에서 실습할 때 설명하겠습니다.

 

 

그리고 모듈 수준의 build.gradle 파일에 다음처럼 파이어베이스의 인증 라이브러리를 등록해야 합니다.

 

implementation 'com.google.firebase:firebase-auth-ktx:21.0.1'

 

파이어베이스 인증 객체 얻기


안드로이드 앱에서 파이어베이스 인증 처리는 FirebaseAuth 객체를 얻는 것으로 시작합니다. FirebaseAuth 객체에서 제공하는 각종 함수로 회원가입, 로그인, 로그아웃, 구글 로그인 등을 처리할 수 있습니다. 이러한 FirebaseAuth 객체는 Firebase.auth로 얻습니다.

 

lateinit var auth: FirebaseAuth
(... 생략 ...)
auth = Firebase.auth

회원가입하기


먼저 이메일/비밀번호 인증으로 회원가입하는 방법을 살펴보겠습니다. FirebaseAuth 객체의 createUserWithEmailAndPassword() 함수로 파이어베이스에 이메일/비밀번호를 등록합니다. 매개변수는 등록할 이메일과 비밀번호이며 결과는 addOnCompleteListener() 함수의 두 번째 매개변수로 등록하는 콜백 함수로 확인합니다.

 

auth.createUserWithEmailAndPassword(email, password)
    .addOnCompleteListener(this) { task ->
    (... 생략 ...)
}

그리고 콜백 함수의 매개변수인 Task<AuthResult> 객체로 회원가입 성공·실패를 판단합니다. Task 객체의 isSuccessful로 파이어베이스에 등록이 성공했는지를 알 수 있으며, 실패했다면 exception으로 원인을 확인할 수 있습니다.

 

auth.createUserWithEmailAndPassword(email, password)
.addOnCompleteListener(this) { task ->
    if (task.isSuccessful) {
    	(... 생략 ...)
    } else {
    	Log.w("kkang", "createUserWithEmail:failure", task.exception)
    }
}