이번 팀과제에서 GPS 기반 채팅 앱을 제작하게 되었다.
그중에서 난 로그인 및 회원가입 페이지를 제작하고
로그인 인증을 firebase authentication 기능으로 연동하는 역할을 맡았다.
이에 대해 정리해보려 한다.
(작업난이도를 고려해 DB에만 연동하는 기능으로 변경함)
Authentication기능은 Firebase에서 기본적으로 지원해주는 기능이며
이를 통해 어플에 로그인 할때 인증을 할 수 있도록 도와준다. (익명인증도 가능)
이때 Firebase에서 허용된 소셜 로그인 제공 업체만 사용이 가능한데
메이저 업체로는 Google, Apple, Facebook 이 있고
이밖에는 Yahoo, Github, Twitter, MS 등이 있다.
(카카오, 네이버 인증도 연결할 수는 있지만 위 업체들보다는 연결 과정이 다소 복잡하다고 한다.)
이 기능을 통해서 UID 라는 사용자 인증코드를 생성/관리할 수 있어 편리하다.
이는 Firestore 데이터베이스를 사용하는 경우 보안규칙의 기준이 되기도 한다.
참고사이트
플러그인을 설치해야 이 모든 기능을 사용할 수 있으므로 필수적으로 설치하도록 하자.
flutter pub add firebase_auth
우리는 이메일을 활용한 로그인방법을 활용할 예정이므로
firebase에서는 이메일/비밀번호 로그인방식을 선택해뒀다.
createUserWithEmailAndPassword() 메서드를 호출하여 사용자를 생성 한다.
userCredential =
await FirebaseAuth.instance.createUserWithEmailAndPassword(
email: emailController.text,
password: pwController.text,
);
스낵바형태로 에러를 출력하려면 아래와 같이 작성한다.
try {
UserCredential _credential =
await _firebaseAuth.createUserWithEmailAndPassword(
email: "abc@abc.kr", password: "1112323");
if (_credential.user != null) {
user = _credential.user;
} else {
showSnackbar(context, "Server Error");
}
} on FirebaseAuthException catch (error) {
logger.e(error.code);
String? _errorCode;
switch (error.code) {
case "email-already-in-use":
_errorCode = error.code;
break;
case "invalid-email":
_errorCode = error.code;
break;
case "weak-password":
_errorCode = error.code;
break;
case "operation-not-allowed":
_errorCode = error.code;
break;
default:
_errorCode = null;
}
if (_errorCode != null) {
showSnackbar(context, _errorCode);
}
}