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)를 통해 실제 에러 내용을 로그로 확인할 수 있습니다.