본문 바로가기
FireBase

Firebase - 안드로이드프로젝트와 파이어베이스 연동 (2)

by 봄석 2019. 1. 7.

Firebase - 안드로이드프로젝트와 파이어베이스 연동


FirebaseAuth의 기능들

 명칭

기능 

  createUserWithEmailAndPassword

 회원가입 

  signlnWithEmailAndPassword

 로그인 

  sendEmailVerification

 회원 가입한 이메일 유효 확인 

  updateEmail 

 회원 가입한 아이디 이메일 변경 

  updatePassword 

 회원 가입한 아이디 패스워드 변경 

  sendPasswordResetEmail 

 회원 가입한 비밀번호 재설정 

  delete 

 회원 가입한 아이디 삭제 

  reauthenticate 

 아이디 재 인증 




FirebaseAuth 호출

FirebaseAuth를 선언하기 위해서는 "FirebaseAuth.getInstance() "를 입력합니다.

class MainActivity : AppCompatActivity() {
    
    lateinit var auth : FirebaseAuth
    
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        
        auth =FirebaseAuth.getInstance()
    }

}





회원가입(createUserWithEmailAndPassword)

비밀번호 기반의 계정을 생성하기 위해서는 FirebaseAuth에 있는 

createUserWithEmailAndPassword 라는 기능을 사용합니다.


[입력 형식]

//형식

createUserWithEmailAndPassword( 아이디(String), 패스워드(String))



예)

private fun createUserId(email:String, password:String){
        auth?.createUserWithEmailAndPassword(email,password)
            ?.addOnCompleteListener(this) { task->
                if(task.isSuccessful){
                    //아이디 생성이 완료 되었을 때
                    val user=auth?.currentUser
                }else{
                    //아이디 생성이 실패했을 경우
                }
            }
    }



로그인(signInWithEmailAndPassword)

비밀번호 기반의 계정을 로그인하기 위해서는 FirebaseAuth에 있는 

signInWithEmailAndPassword 라는 기능을 사용합니다.


[입력 형식]

//형식

signInWithEmailAndPassword( 아이디(String), 패스워드(String))



예)

private fun loginUserId(email:String, password: String){
        auth?.signInWithEmailAndPassword(email, password)
            ?.addOnCompleteListener(this){
                if(it.isSuccessful){
                    //로그인 성공시 이벤트발생
                }else{
                    //로그인 실패시 이벤트 발생
                }
            }
    }

여기서 로그인 성공시 다음화면으로 넘어가는 코드를 넣는것으로 생각하는 경우가 많습니다.

하지만 그렇게 될 경우 나중에 자동 로그인 기능, 다른 소셜 로그인 기능들과 충돌할 수 있으니

간단히 로그인이 성공했다는 메시지만 띄어주는것이 좋습니다.



메일 유효성 체크(sendEmailVerification)

회원가입 후에 이메일이 유효한지 체크하기 위해서는 sendEmailVerification를 사용하면 됩니다.

이메일 유효성을 체크하기 위해서 가입된 주소로 이메일을 보내게 됩니다. 

여기서 이메일 유효성 체크를 하기 위해 그에 맞는 제목은 수정할 수 있습니다. 

내용 같은 경우는 스팸으로 악용될 수 있는 Firebase 특성상 수정하지 못하도록 되어있습니다.


[입력 형식]

//형식

currentUser.sendEmailVerification( 아이디(String))



예)

private fun verifyEmail(){
        auth?.currentUser?.sendEmailVerification()
            ?.addOnCompleteListener(this){
                if(it.isSuccessful){
                    
                }
            }
    }



그렇다면 Firebase 이메일 인증 양식을 수정해보겠습니다. 

Authentication -> 템플릿 -> 이메일 주소인증으로 이동하면 이메일을 인증하기 위한 발송 메일의 양식을 수정할 수 있도록 되어있습니다.


역시 제목은 수정가능하지만 내용은 수정 불가 합니다.

아래에 템플릿 언어를 클릭해 발송되는 언어를 Korean 으로 설정해주면 한글로 발송됩니다.




패스워드 변경(updatePassword)

이메일 기반 계정 비밀번호를 변경하기 위해서는 

updatePassword를 사용합니다.


[입력 형식]

//형식

currentUser.updatePassword( 패스워드(String))



예)

 private fun updatePassword(newPassword: String) {
        auth?.currentUser?.updatePassword(newPassword)
            ?.addOnCompleteListener(this) {
                if (it.isSuccessful) {
                    //패스워드 변경이 성공했을 때 발생하는 이벤트}
                }
            }
    }





아이디 변경(updateEmail)

이메일 기반의 계정아이디를 변경하기 위해서는 

updateEmail 을 사용하면 됩니다.

또한 이메일을 변경하기 위해서는 가입된 이메일로 변경할 수 있는 링크를  보내게 됩니다 .

이때 보내는 양식도 설정할 수 있습니다.


[입력 형식]

//형식

currentUser.updateEmail(아이디(String))



예)

private fun updateEmail(newEmail:String){
        auth?.currentUser?.updateEmail(newEmail)
            ?.addOnCompleteListener(this){
                if(it.isSuccessful){
                    //이메일 변경이 성공햇을때 발생하는 이벤트
                }
            }
    }



console에서 Authentication-> 템플릿 ->이메일주소 변경


마찬가지로 제목은 수정가능하고 내용은 수정할 수 없습니다.



비밀번호 재설정(sendPasswordResetEmail)

이메일 기반 계정 비밀번호를 잊어버린 경우 비밀번호를 찾아야 하는데 Firebase에는 

비밀번호 찾기 기능은 존재하지 않습니다. 하지만 비밀번호를 재설정 할 수 있는데,

sendPasswordResetEmail 기능을 사용하면 비밀번호를 재설정 할 수 있는 메일이 회원가입된 이메일 주소로 전송됩니다.


[입력 형식]

//형식

sendPasswordResetEmail( 아이디(String))



예)

  private fun resetPassword(email:String){
        auth?.sendPasswordResetEmail(email)
            ?.addOnCompleteListener(this){
                if(it.isSuccessful){
                    //비밀번호 재설정 메일을 보내기가 성공했을때 이벤트
                }
            }
    }



마찬가지로 console에서 Authentication-> 템플릿 ->비밀번호 재설정 에서 보내는 메일 제목을 설정할 수 있습니다.



회원탈퇴 (delete)

소셜 로그인으로 가입한 아이디나 혹은 비밀번호 기반의 아이디를 삭제할 때는

delete를 사용해 주면 됩니다.


[입력 형식]

//형식

currentUser.delete()



예)

private fun deleteId(){
        auth?.currentUser?.delete()
            ?.addOnCompleteListener(this){
                if(it.isSuccessful){
                    //회원 아이디 삭제에 성공했을 때
                }
            }

    }



회원 재인증 (reauthenticate)

이 기능은 보안 관련 부분을 변경할 때 재인증 해주는 기능을 말합니다.

대표적으로 아이디변경, 패스워드 변경 회원 재인증을 해주어야하며

reauthenticate 을 사용하면 회원 재인증을 해줄 수 있습니다.


[입력 형식]

//형식

currentUser.reauthenticate(Credential)



예)

private fun reauthenticate(email: String,password: String){
        val credential =EmailAuthProvider
            .getCredential(email,password)
        
        auth?.currentUser?.reauthenticate(credential)
            ?.addOnCompleteListener(this){
                if(it.isSuccessful){
                    //재인증에 성공했을 때 발생하는 이벤트
                }
            }
    }





FirebaseAuth.AuthStateListener 와 인터페이스

FirebaseAuth.AuthStateListener는 Authentication 로그인 상태를 관리하는 인터페이스 입니다.

가장 많이 쓰이는 부분은 로그인 상태가 변경될 때로 , 로그인이 되던가 로그아웃이 되었을 때 가장 많이 사용합니다.


AuthStateListener는 인터페이스입니다.. 로그인의 상태를 확인하는 눈과 귀라고 생각하면 이해하기 쉬울것입니다.  이를 Activity에 붙여주어야 합니다.

그래서 onStart()와 onPause() 에서 리스너인터페이스를 붙여주고 또 제거합니다.


예)

class MainActivity : AppCompatActivity() {
 
    lateinit var auth: FirebaseAuth
    lateinit var authListener:FirebaseAuth.AuthStateListener //리스너 선언
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
 
        auth = FirebaseAuth.getInstance()
//리스너 초기화
        authListener=FirebaseAuth.AuthStateListener {
            val user =it.currentUser
            if(user!=null){
                //로그인 되었을때 발생하는 이벤트
            }else{
                //로그아웃 또는 로그인이 안 되었을 때 발생하는 이벤트
            }
        }
    }
 
    override fun onStart() {
        super.onStart()
        auth?.addAuthStateListener { authListener!! }
    }
 
    override fun onPause() {
        super.onPause()
        auth?.removeAuthStateListener { authListener!! }
    }
 
    ....
}


댓글