[Firebase] Authentication

chris_seed·2022년 7월 2일
0

Firebase

목록 보기
2/3
post-thumbnail

기본으로 해야할 작업




전화번호로 인증하기

Firebase의 기능인 Authentication을 이용해서 앱에서 바로 전화로 로그인할 수 있는 기능 구현

  • 해당 기능을 구현할 때 주의할 점은 전화번호로만 인증을 진행하면 보안이 약해질 수 있다. 따라서 이것을 공지하고 추가적인 로그인 기능을 부여해야한다. (공식문서에서 권장)

인증 시 로봇체크(reCaptcha) 생략하는 방법

  1. Firebase 프로젝트에서 SHA 인증서 지문에 SHA-1, SHA-256 추가

  2. 아래 url로 들어가서 Android DeviceCheck API 링크로 들어가기
    Android에서 전화번호로 Firebase에 인증 | Firebase Documentation

  1. 사용 클릭




구글로 인증하기

Firebase의 기능인 Authentication을 이용해서 앱에서 바로 구글로 로그인할 수 있는 기능 구현

  • Activity
    // 디버깅 위한 변수 선언 -> 확인하고 나면 삭제
    private const val TAG = "LoginActivity"
    
    // ActivityForResult 위한 Request gode 선언 , 값은 자연수 아무거나 가능
    private const val REQUEST_GOOGLE_CODE = 9009
    
    class LoginActivity : AppCompatActivity() {
    
    // FirebaseAuth 변수 선언
        private lateinit var auth: FirebaseAuth
    
    // 데이터바인딩 변수 선언
        private lateinit var binding: ActivityLoginBinding
    
    // GoogleSignInClient 변수 선언
        private lateinit var googleSignInClient : GoogleSignInClient
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            binding = DataBindingUtil.setContentView(this, R.layout.activity_login)
            auth = Firebase.auth
    
    // 이벤트 관련 함수 선언 (onCreate를 깔끔하게 정리하기 위해 
    // 이벤트 관련 함수를 setupEvents에 모아놓음)
            setupEvents()
    
        }
    
        private fun setupEvents() {				
    				...
    
    // "구글아이디로 로그인" 버튼 클릭 시 이벤트 발생
            binding.googleLoginButton.setOnClickListener {
    
                val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                    .requestIdToken(getString(com.firebase.ui.auth.R.string.default_web_client_id))
                    .requestEmail()
                    .build()
    
                googleSignInClient = GoogleSignIn.getClient(this, gso)
    
                googleLogin()
            }
        }
    
        private fun googleLogin() {
            val signInClient = googleSignInClient?.signInIntent
            startActivityForResult(signInClient, REQUEST_GOOGLE_CODE)
        }
    
        override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
            super.onActivityResult(requestCode, resultCode, data)
            if (requestCode == REQUEST_GOOGLE_CODE) {
                val result = Auth.GoogleSignInApi.getSignInResultFromIntent(data)
                if (result!!.isSuccess) {
                    val account = result.signInAccount
                    firebaseAuthWithGoogle(account)
                }
            }
        }
    
        private fun firebaseAuthWithGoogle(account: GoogleSignInAccount?) {
            val credential = GoogleAuthProvider.getCredential(account?.idToken, null)
            auth?.signInWithCredential(credential)
                ?.addOnCompleteListener { task ->
                    if (task.isSuccessful) {
                        Log.d(TAG, "로그인 성공")
                        updateUI(auth.currentUser)
                        moveToMainActivity()
                    } else {
                        Toast.makeText(this, task.exception?.message, Toast.LENGTH_SHORT).show()
                        updateUI(null)
                    }
                }
        }
    
    // 로그인 성공 시 메인액티비티로 가기 위한 함수
        private fun moveToMainActivity() {
            val intentMain = Intent(this, MainActivity::class.java)
            finish()
            startActivity(intentMain)
        }
    
    // 로그인 계정 유지
        private fun updateUI(user: FirebaseUser?) {
        }
    
        public override fun onStart() {
            super.onStart()
            val currentUser = auth.currentUser
            if (currentUser != null) {
                reload()
            }
        }
    
        private fun reload() {
        }
    }




에러날때 참고하기

profile
Android Developer with Kotlin

0개의 댓글