Firebase 이메일 사용자 재인증하기 (requires-recent-login 에러)
파이어베이스를 이용해서 사용자를 삭제하기 위해 deleteUser()함수를 이용하여 구현했는데, 위와같은 오류가 발생했다.
그래서 공식 문서를 확인해보니 사용자 계정 삭제, 비밀번호 변경과 같이 보안에 민간한 작업을 하려면 최근에 로그인한 적이 있어야 한다고 설명되어있었다.
그래서 사용자 상태를 업데이트하기위해 재인증을 하는 코드를 추가해주어야하는데, 예시코드에는 credential을 받아오는 함수를 직접 작성하라 되어있고, 어떤 인자를 넣어줘야하는지 알려주지 않았다.
그래서 reauthenticateWithCredential을 선언한 파일로가서 받아야하는 인자의 타입이 AuthCredential임을 알아냈고, 구글에 검색해서 아래와 같은 결과를 찾았다.
나는 이메일을 이용하여 로그인을 구현하였기때문에 EmailAuthCrediential을 사용하였다. 만약 다른 소셜 로그인을 이용했다면 서비스에 맞는 클래스를 사용하면 될 것이다!
import { User, EmailAuthProvider, reauthenticateWithCredential } from 'firebase/auth';
async function userRecertification(email: string, password: string) {
const user = auth.currentUser as User;
const authCredential = EmailAuthProvider.credential(email, password);
let bool;
await reauthenticateWithCredential(user, authCredential)
.then(() => {
bool = true;
})
.catch((error) => {
console.log(error);
bool = false;
});
return bool;
}
최종 구현 코드이다. 재인증 함수 컴포넌트를 분리해서 작성하였고, EmailAuthCrediential.credential()을 이용해 authCredential정보를 받아와서 공식문서에 적힌대로 사용자 재인증 기능을 구현하였다.
추가로 bool을 선언하고 재인증 함수를 불러오는동안 return이 되어버려 undefined값이 반환되었기 때문에, await을 넣어주어 제대로 변수에 값을 지정한 다음 return하도록 했다.