[ios] FirebaseAuth (회원가입, 로그인, 로그아웃, 인증 메일 전송)

Cobugi·2022년 3월 12일
1
post-thumbnail

파이어베이스를 이용한 회원가입, 로그인, 로그아웃, 인증 메일 전송 구현하기

라이브러리

  • SnapKit
  • RxSwift
  • RxCocoa
  • FirebaseAuth

디자인패턴

  • MVVM(아직 연습중...)

회원가입

  • createUser 메서드를 사용하면 간단하게 구현할 수 있다
  • 에러가 났다면 그 에러를 표시하고
    • 에러의 예: 입력한 이메일의 형식이 맞지 않음, 비밀번호의 길이가 6자리 이상이 아님, 이미 존재하는 이메일임 등
    • 발생한 에러를 NSError로 타입캐스팅 하여 에러 코드를 확인할 수 있다
  • 에러가 나지 않았다면 회원가입에 성공한 것이다
    • 회원가입에 성공했다면 자동적으로 로그인이 되는 것을 확인했다
import UIKit
import RxSwift
import RxCocoa
import FirebaseAuth

Auth.auth()
	.createUser(withEmail: email, password: password) { [weak self] res, error in
    	guard let self = self else { return }
        if let error = error {
	        // 에러가 났다면 여기서 처리 ...
        	self.err.onNext(error)
        } else {
	        // 회원가입에 성공했다면 여기서 처리...
            self.signUpSuccess.onNext(self.signUpSuccessAlert())
        }
    }

로그인

  • signIn 메서드를 사용하면 간단하게 구현할 수 있다
  • 회원가입에서 했던 것과 비슷하게
  • 로그인 중 에러가 발생했다면 에러를 표시하고
  • 에러가 나지 않았다면 로그인에 성공한 것이다
import UIKit
import RxSwift
import RxCocoa
import FirebaseAuth

Auth.auth()
	 .signIn(withEmail: email, password: password) { [weak self] res, error in
    	guard let self = self else { return }
        if let error = error {
	        // 에러가 났다면 여기서 처리 ...
        	self.err.onNext(error)
        } else {
	        // 로그인에 성공했다면 여기서 처리...
            self.successSignIn.onNext(self.successSignInAlert())
        }
    }

로그아웃

  • signOut 메서드를 사용하면 정말 간단하게 구현할 수 있다
  • 이 메서드는 에러를 방출하므로
  • do-catch 문으로 예외처리를 해주면 된다
import UIKit
import RxSwift
import RxCocoa
import FirebaseAuth

do {
	try FIRAuth.signOut()
} catch {
	print("-----SignOut ERROR-----")
}

인증 메일 전송

  1. 이메일 인증이 되어있는지 확인하기
Auth.auth().currentUser?.isEmailVerified // true or false
  1. 이메일 인증 메일 보내기
    • sendEmailVerification 메서드를 사용하자
    • 회원가입, 로그인과 동일한 방법으로 사용하면 된다
    • 이메일 인증 메일 전송을 하면 가입한 이메일로 전송이 된다
Auth.auth()
	.currentUser?
	.sendEmailVerification(completion: { [weak self] error in
    	guard let self = self else { return }
        if let error = error {
	        // 에러가 났다면 여기서 처리 ...
            print("-----Verify Email ERROR \(error.localizedDescription)-----")
        } else {
	        // 이메일 전송에 성공했다면 여기서 처리...
            self.showAlert.onNext(self.showSendEmailAlert())
        }
    }

소스코드

profile
iOS Developer 🐢

4개의 댓글

comment-user-thumbnail
2022년 3월 20일

안녕하세요! 글 항상 잘 보고 있습니다!!
제가 지금까지 애플 날씨 앱이랑 기타 등등 개인 프로젝트를 만들어 봤어요
지금은 코딩테스트 준비하면서 취업준비 중인데 요즘 갈피를 잃는 것 같아 조금 난감합니다ㅠㅠ
작성하신 깃허브 코드 봤는데 되게 깔끔하게 잘 하셔서 코부기님은 공부하실 때 공부 어떻게 하셨는지 궁금합니다...!
강의나 다른 조언도 괜찮아요!

1개의 답글