[swift] Swift FirebaseUI를 사용하여 비밀번호 재설정 구현하기

FirebaseUI는 Firebase를 사용하는 앱을 보다 쉽게 구현할 수 있도록 도와주는 라이브러리입니다. FirebaseUI를 사용하면 인증 기능, 데이터베이스 연동, 스토리지 관리 등을 간편하게 구현할 수 있습니다. 이번 글에서는 Swift FirebaseUI를 사용하여 비밀번호 재설정 기능을 구현하는 방법을 알아보겠습니다.

1. FirebaseUI 설치하기

FirebaseUI를 사용하기 위해 먼저 FirebaseUI 라이브러리를 프로젝트에 추가해야 합니다.

pod 'FirebaseUI/Auth'

프로젝트의 Podfile에 위의 코드를 추가한 후, 터미널에서 pod install 명령어를 실행하여 FirebaseUI를 설치합니다.

2. 비밀번호 재설정 뷰 컨트롤러 구현하기

import Firebase
import FirebaseUI

class ResetPasswordViewController: FUIPasswordRecoveryViewController {
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        
        // FirebaseUI 뷰를 커스텀합니다.
        customizations()
    }
    
    func customizations() {
        // 뷰의 타이틀과 로고를 커스텀합니다.
        title = "비밀번호 재설정"
        // 로고는 Assets.xcassets에 등록한 이미지로 설정합니다.
        let logoImageView = UIImageView(image: UIImage(named: "logo"))
        logoImageView.contentMode = .scaleAspectFit
        tableView.tableHeaderView = logoImageView
        
        // 뷰의 색상과 폰트를 커스텀합니다.
        tableView.backgroundColor = .white
        tableView.tintColor = .systemBlue
        let titleLabel = UILabel()
        titleLabel.text = title
        titleLabel.font = UIFont.boldSystemFont(ofSize: 20)
        titleLabel.textColor = .systemBlue
        navigationItem.titleView = titleLabel
    }
    
    override func emailHidden() -> Bool {
        // 이메일 입력 필드를 숨길지 여부를 설정합니다.
        return false
    }
    
    override func didSendResetPasswordRequest(forEmail email: String?, error: Error?) {
        // 비밀번호 재설정 요청 후 콜백 동작을 구현합니다.
        if let error = error {
            // 오류가 발생한 경우, 오류에 대한 처리 로직을 작성합니다.
            print("비밀번호 재설정 오류 발생: \(error.localizedDescription)")
        } else {
            // 비밀번호 재설정 요청이 성공한 경우, 성공 처리 로직을 작성합니다.
            print("비밀번호 재설정 이메일 전송됨")
        }
    }
}

위의 코드는 비밀번호 재설정 기능을 위한 custom ResetPasswordViewController를 구현한 예시입니다. FUIPasswordRecoveryViewController 클래스를 상속받아 FirebaseUI의 비밀번호 재설정 기능을 사용합니다. viewWillAppear 메서드에서 FirebaseUI 뷰를 커스텀하고, customizations 메서드에서 뷰의 타이틀, 로고 및 스타일을 설정합니다. emailHidden 메서드에서 이메일 입력 필드를 숨길지 여부를 설정할 수 있습니다. didSendResetPasswordRequest 메서드는 비밀번호 재설정 요청 후 호출되는 콜백 메서드로, 비밀번호 재설정 요청 결과에 따라 동작을 구현할 수 있습니다.

3. 뷰 컨트롤러 호출하기

비밀번호 재설정 기능을 사용하기 위해, ResetPasswordViewController를 호출하는 곳에서 아래의 코드를 사용합니다.

import Firebase
import FirebaseAuthUI

//...

let authUI = FUIAuth.defaultAuthUI()
let providers: [FUIAuthProvider] = [
    FUIEmailAuth(),
    FUIOAuth.appleAuthProvider(),
    FUIOAuth.googleAuthProvider()
]
authUI?.providers = providers

if let emailController = authUI?.passwordRecoveryViewController() {
    emailController.navigationItem.leftBarButtonItem = nil
    navigationController?.pushViewController(emailController, animated: true)
}

위의 코드는 FirebaseUI를 사용하여 비밀번호 재설정 기능을 호출하는 예시입니다. FUIAuth.defaultAuthUI()를 사용하여 FirebaseUI의 authUI 인스턴스를 가져온 후, 사용할 인증 방법을 providers로 설정합니다. 이후 authUI?.passwordRecoveryViewController()를 호출하여 비밀번호 재설정 뷰 컨트롤러를 가져온 뒤, 네비게이션 스택에 push하여 보여줍니다.

이제 위의 코드를 실행하면 사용자는 FirebaseUI를 통해 비밀번호를 재설정할 수 있는 화면을 볼 수 있습니다.

이렇게 Swift FirebaseUI를 사용하여 비밀번호 재설정 기능을 구현할 수 있습니다. FirebaseUI는 많은 인증 및 데이터베이스 기능을 제공하므로, 앱 개발 시 편리하게 사용할 수 있습니다.

참고 자료