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를 통해서 다시 기존의 비밀번호를 입력하는 식으로 구성했다.
댓글