DEV - iOS/iOS

[Swift] Firebase Auth 로그인 기능

베이비코더 2022. 4. 27. 00:56
반응형

Firebase의 실시간 데이터베이스를 간단하게 사용해봤는데, 

회원가입과 로그인 기능은 Firebase의 Authentication 기능으로 더 편리하게 관리할 수 있다.

 

Firebase Console - Authentication

 

Firebase Authentication 시작하기

다양한 소셜 로그인 기능도 제공하고 있는데 이건 다음에 추가하도록 하고!

이메일/비밀번호를 선택한다.

 

비밀번호가 없는 로그인은 사용하지 않았다.

 

새 제공업체 추가 버튼을 누르면 소셜 기능을 추가할 수 있고,

오른쪽 연필 버튼을 누르면 비밀번호가 없는 로그인 설정도 다시 해줄 수 있다.

 

Users 탭

Users 탭을 클릭하면 Auth 기능을 통해 가입한 사용자들을 볼 수 있고,

사용자 추가 버튼을 눌러서도 추가할 수 있다.

 

Firebase Console에서 설정은 끝났으니 이제 코딩하면 된다.

 

* Firebase Auth 패키지도 추가해야 됨 ! (Xcode or CocoaPods)

 

로그인 기능 구현

 

Firebase Console 내에서 사용자를 바로 추가할 수 있어서

회원가입 기능을 구현하기 전에 로그인 기능부터 구현했다.

 

사용자 추가

사용자 추가 버튼을 눌러서 테스트 유저를 추가했다.

추가되는 사용자들은 사용자 UID라는 고유한 값을 가지게 된다.

 

LoginViewController

import FirebaseAuth

class LoginViewController: UIViewController {

    @IBOutlet weak var emailTextField: UITextField!
    @IBOutlet weak var pwTextField: UITextField!
    @IBOutlet weak var loginButton: UIButton!
    
    override func viewDidLoad() {
        super.viewDidLoad()

    }
    
    /* Login Button Action */
    @IBAction func userLoginAction(_ sender: Any) {
        
        let email: String = emailTextField.text!.description
        let pw: String = pwTextField.text!.description
        
        // Firebase Auth Login
        Auth.auth().signIn(withEmail: email, password: pw) {authResult, error in
            if authResult != nil {
                print("로그인 성공")
            } else {
                print("로그인 실패")
                print(error.debugDescription)
            }
            
        }
    }
    
}

 

FirebaseAuth 패키지 추가하고 import하면 Auth 클래스를 사용할 수 있다.

Auth.auth().signIn(withEmail: email, password: pw)를 구현하려면 두 개의 파라미터 값을 입력하게 한다.

성공 여부를 알기 위한 authResult와 에러 메시지를 확인할 수 있는 error로 Firebase 공식 참고 문서에 이렇게 지정했길래 나도 따라 했지만 이런 변수 이름은 편한 대로 바꿔도 된다.

 

첫 번째 파라미터인 authResult가 nil이 아니면 성공, nil이면 실패한 거고 실패한 이유를 알 수 있다.

 

로그인 실행 결과

로그인 화면

이메일과 패스워드를 받는 텍스트 박스에 각각 입력 후 Login 버튼을 클릭하면 작성한 코드가 실행된다.

 

이메일, 패스워드 둘 다 틀리게 입력
비밀번호 틀리게 입력
로그인 성공

Firebase console에서 추가했던 사용자의 정보 그대로 로그인 기능이 잘 작동된다!

 

에러 코드값

 

        // Firebase Auth Login
        Auth.auth().signIn(withEmail: email, password: pw) {authResult, error in
            if authResult != nil {
                print("로그인 성공")
            } else {
                print("로그인 실패")
                print(error.debugDescription)
                if let errorCode: AuthErrorCode = AuthErrorCode(rawValue: error!._code) {
                    print(errorCode.rawValue)
                }
            }
            
        }

error code 출력

로그인 실패 시 에러 코드값만 따로 출력하는 로직을 추가했다.

 

콘솔창에 찍힌 에러 메시지(error.debugDescription)를 보면 Code=...가 적혀있는 걸 볼 수 있다.

등록되지 않은 이메일 일 때, 이메일은 맞지만 패스워드가 틀렸을 때를 코드값으로 알 수 있다.

이 코드 값을 사용하면 로그인 버튼을 누른 뒤 나올 에러 메시지를 alert창을 좀 더 자세하게 보여줄 수 있을 것 같다.

반응형