-
[4]_1_1. (Firebase) e-mail / password를 이용한 가입 / 로그인 / 로그아웃서버/1.(Firebase) Authentication 2022. 7. 20. 15:49
Firebase > 빌드 > Authentication에서 로그인에 사용할 method를 선택 / 추가할 수 있다.
우선 Email과 비밀번호로를 이용한 방법부터 도전!
다만, 여기서 사용하는 이메일이 정말로 존재하는 것인지 인증하는 것도 필요한 스텝이라고 생각하는데 이는 차후로 미루자.
import FirebaseAuth
가입/로그인/로그아웃 과정에는 Auth 클래스?객체?를 많이 사용하는데 이때 필요한 라이브러리는 "FirebaseAuth"이다. 기억하자.
가입
이제 이 기능이 실사용될 곳에 코드를 작성한다.
가입에 사용할 코드는 Auth.auth()에 있는 createUser(withEmail: password: completion)이다.
cf) firebase 제공 기본 기능
1) 'email'에 @가 없으면 올바른 텍스트로 인정하지 않는다.
2) 'password'가 6자 이상이지 않으면 에러를 던진다.
이 에러들은 아직까지는 알 수 없고, error 메세지를 받아야 확인할 수 있다.
@IBAction func tabBtnNext(_ sender: UIButton) { let email = tfEmail.text ?? "" let password = tfPassword.text ?? "" Auth.auth().createUser(withEmail: email, password: password) { authDataResult, error in self.showMainViewViewController() } } func showMainViewViewController() { let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main) let viewController = storyboard.instantiateViewController(withIdentifier: "WelcomeViewController") viewController.modalPresentationStyle = .fullScreen navigationController?.show(viewController, sender: nil) }
로그인
실제 서비스에서 가입/로그인을 구현할 때는 각각의 버튼을 따로 만들 거라 생각한다.
다만 가입에서 이미 있는 이메일을 입력할 경우 경고 메세지를 파악하여 로그인으로 돌리는 절차를 위해 가입과 로그인을 같은 버튼으로 처리해보자.
위 가입에서 작성한 코드를 아래와 같이 수정한다.
@IBAction func tabBtnNext(_ sender: UIButton) { let email = tfEmail.text ?? "" let password = tfPassword.text ?? "" Auth.auth().createUser(withEmail: email, password: password) { authDataResult, error in if let error = error { let code = (error as NSError).code switch code { case 17007: self.loginUser(withEmail: email, password: password) default: self.lblErrorMessage.text = error.localizedDescription } } else { self.showMainViewViewController() } } } private func loginUser(withEmail email: String, password: String) { Auth.auth().signIn(withEmail: email, password: password) { authDataResult, error in if let error = error { self.lblErrorMessage.text = error.localizedDescription } else { self.showMainViewViewController() } } }
여기서 firebase에서 던져준 error cdoe 17007은 "이미 가입된 이메일 주소"이다.
이는 아래처럼 BreakPoint를 걸고, 실제 앱을 실행한 뒤 던져지는 error를 확인하면 파악할 수 있다.
콘솔 창 오른쪽에 "po error"를 입력하면 17007 코드 및 내용을 확인할 수 있다.
그렇다면 이제 error code가 17007인 경우를 로그인으로 돌리면 된다.
로그인에 사용한 명령어는 signIn(withEmail: password: completion:)이다.
이때도 비밀번호가 틀렸거나 할 수 있으니 에러를 처리하도록 하자. (위에 작성한 걸 다시 한 번 가져와 본다.)
private func loginUser(withEmail email: String, password: String) { Auth.auth().signIn(withEmail: email, password: password) { authDataResult, error in if let error = error { self.lblErrorMessage.text = error.localizedDescription } else { self.showMainViewViewController() } } }
로그아웃
로그아웃이야, 버튼에 아래처럼만 입력하면 될 줄 알았다.
Auth.auth().signout()
우선은 do try문을 사용할 때를 아직 잘 모르니 명령어까지만 알아두자.
@IBAction func tabBtnLogout(_ sender: UIButton) { let firebaseAuth = Auth.auth() do { try firebaseAuth.signOut() self.navigationController?.popToRootViewController(animated: true) } catch let signOutError as NSError { print("Error: singout \(signOutError.localizedDescription)") } }
이제 로그인을 하면 이렇게 Firebase 사이트에서 확인할 수 있다.
'서버 > 1.(Firebase) Authentication' 카테고리의 다른 글
[4]_1_3. (Firebase) 비밀번호 변경 / 탈퇴 (0) 2022.07.24 [4]_1_2. (Firebase) Google id를 이용한 가입 / 로그인 / 로그아웃 (0) 2022.07.24 [4]_1_0.Firebase 사용 준비 작업 (3 steps) (0) 2022.07.20