Mobile
FirebaseAuth 에서 Email/Password 오류 메시지에 관해서
크레비즈
2025. 2. 20. 00:00
FirebaseAuth 를 통해 email/password 입력을 받고 로그인을 하는 화면을 개발중에
입력 오류에 대한 메시지 처리를
if (e.code == 'user-not-found') {
logger.e('No user found for that email.');
} else if (e.code == 'wrong-password') {
logger.e('Wrong password provided for that user.');
}
이렇게 처리 했는데..
에러 메시지가 'invalid-credential' 으로 동일하게 나오고 있다.
그래서 Claude 3.5 Sonnet 를 통해 확인해본 결과
Firebase Auth의 보안 정책 때문이라고 한다.
이는 Firebase Auth의 보안 정책 때문입니다. Firebase는 의도적으로 이메일이 잘못되었는지 비밀번호가 잘못되었는지 구분하지 않고 동일한 'invalid-credential' 에러를 반환합니다.
이유는 다음과 같습니다:
1. 보안 강화: 공격자가 유효한 이메일 주소를 찾아내는 것을 방지합니다. 만약 "이메일이 존재하지 않습니다"와 "비밀번호가 잘못되었습니다"를 구분해서 보여준다면, 공격자는 이를 통해 시스템에 등록된 이메일 주소들을 열거할 수 있습니다.
2. 무차별 대입 공격 방지: 특정 이메일의 존재 여부를 확인할 수 없게 함으로써, 브루트포스 공격이나 사전 공격의 효율성을 낮춥니다.
이전 버전의 Firebase Auth에서는 'user-not-found'나 'wrong-password' 같은 구체적인 에러 코드를 제공했지만, 보안 강화를 위해 최신 버전에서는 이를 통합하여 'invalid-credential'로 통일했습니다.
따라서 사용자에게 보여주는 에러 메시지도 다음과 같이 일반적인 메시지로 수정하는 것이 좋습니다:
{{ ... }}
} on FirebaseAuthException catch (e) {
if (!mounted) return;
Navigator.pop(context);
if (e.code == 'invalid-credential') {
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(
content: Text('이메일 또는 비밀번호가 올바르지 않습니다'),
duration: Duration(seconds: 2),
),
);
}
} catch (e) {
{{ ... }}
이렇게 수정하면:
1. 보안성이 향상됩니다.
2. 사용자에게 더 명확하고 일관된 메시지를 제공합니다.
3. Firebase의 최신 보안 권장사항을 따르게 됩니다.
만약 개발 중에 디버깅이 필요하다면, logger.e(e)를 통해 실제 에러 내용을 로그로 확인할 수 있습니다.