본문 바로가기
카테고리 없음

firebase 사용자 재인증 (수정필요)

by 긴모양 2020. 12. 28.

firebase를 DB로 사용하고 있다면 로마에선 로마의 법을 따라야하듯.
비밀번호 변경을 할 때도, 회원탈퇴를 할 때 필요하다.

사용자 재인증은 사용자가 로그인을 해 앱에 진입한 후 오랜 시간이 흘렀다면 오류가 발생해 위와 같은 작업을 할 수 없으므로 firebase의 사용자 재인증을 해줘야한다. 로그인을 하고 앱을 오래 켜는 경우에는 보안에 민감한 작업을 할 때 경고를 주기에 구글이나 페북은 미리 협의해서 에러를 띄우도록 되어있는 것 같다.

아래는 firebase에서 기본적으로 제공하는 코드인데 (사실 어지간해서 firebase 코드 그대로 쓰면 문제없다.)
하지만 자꾸 AuthCredential를 불러오지 못해서 답답해 하던차 답을 찾았다.

let user = Auth.auth().currentUser
var credential: AuthCredential

// Prompt the user to re-provide their sign-in credentials

user?.reauthenticate(with: credential) { error in
  if let error = error {
    // An error happened.
  } else {
    // User re-authenticated.
  }
}

우선 위의 코드는 재인증을 불러와서 에러가 있다면 내가 지정한 행동을 하는 것인데 
이메일을 재설정 하기 위해서는 Credential이라는 객체가 필요하다.

 

let user = Auth.auth().currentUser
        let userEmail = user?.email
        let userPw = pwTextFieldConfirm.text?.trimmingCharacters(in: .whitespacesAndNewlines)
        let credential = EmailAuthProvider.credential(withEmail: userEmail!, password: userPw!)

        user?.reauthenticate(with: credential, completion: { error in
            if let error != error {
                // Show error
                return
            }
            user?.delete(completion: { (error) in
                if let error = error { 
                	// An error happend.
                }
            })
        })

Auth.auth().currentUser에서는 현재 로그인한 사용자 정보를 가져오고 그런 다음에 이메일과 패스워드를 가져와야한다.
그러기 위해선 let credential = EmailAuthProvider(초기화)를 사용하는데
credential이라는 객체가 필요해서 provider가 필요했다.
firebase.google.com/docs/reference/swift/firebaseauth/api/reference/Classes/EmailAuthProvider

 

FirebaseAuth Framework Reference

firebase.ml.naturallanguage.translate

firebase.google.com

 

아래 링크를 참조하면 이해가 쉬울 것이다. password를 위해 textfield를 통해서 다시 기존의 비밀번호를 입력하는 식으로 구성했다. 

댓글