ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [iOS] Firebase로 REST API 공부하기(+ Postman, Alamofire) - 5. 회원가입, 로그인
    공부기록/iOS 2021. 9. 1. 19:44

     

    Firebase의 회원가입과 로그인은 POST를 사용한다.

    Database를 다루는것과 URL이 달라진다.

    회원가입할때는 accounts:signUp, 로그인할때는 accounts:signInWithPassword가 사용된다.

    Query로 API_KEY가 사용된다.

     

    Body는 email, password, returnSecureToken으로 간단하게 만든다.

    returnSecureToken은 항상 true여야 한다.

     

    먼저 포스트맨으로 확인한 결과다. 테스트는 vocahelper의 테스트 이메일을 사용했다.

    idToken과 refreshToken을 얻을 수 있다.

    localId는 Firebase 가입하면 생기는 uid다.

     

     

    Swift로는 URL도 다르게 쓰고해서 AuthManager를 따로 만들어서 사용했다.

     

    enum SignStatus: String {
        case signUp = "signUp"
        case signIn = "signInWithPassword"    
    }

     

    회원가입과 로그인에 쓰이는 URL을 다르게 만들어 주는데 enum을 사용한다.

     

    private let path = Bundle.main.url(forResource: "GoogleService-Info", withExtension: "plist")
    private var rootURL: String = "https://identitytoolkit.googleapis.com/v1/accounts:"
        
        
    private func makeURL(signStatus: SignStatus) -> URL! {
        let data = try!  Data(contentsOf: path!)
        let plist = try! PropertyListSerialization.propertyList(from: data, options: [], format: nil) as! [String : Any]
        let key = URLQueryItem(name: "key", value: plist["API_KEY"] as? String)
            
        let pathURL = rootURL + signStatus.rawValue
        var component = URLComponents(string: pathURL)
        component?.queryItems = [key]
        return component?.url
    }

     

    Query로 쓰이는 API_KEY를 가져오기 위해서 PropertyListSerialization을 사용했다.

    makeURL()는 signStatus를 받아서 rawValue를 사용해 URL을 만든다.

    func manageSign (signStatus: SignStatus, email: String, password: String) {
            
    	let parameter: [String : Any] = [
    		"email" : email,
    		"password" : password,
    		"returnSecureToken" : true
    	]
            
    	AF.request(makeURL(signStatus: signStatus), method: .post, parameters: parameter).responseJSON { response in
    		if let error = response.error {
    			print(error)
    		}
    		else if let data = response.data {
    			let json = try? JSONSerialization.jsonObject(with: data, options: .fragmentsAllowed)
    			print(json!)
    		}
    	}
    }

     

    URL은 위에서 만든 enum의 rawValue를 이용한 makeURL의 리턴값을 사용한다.

    parameter는 간단하게 [String : Any]를 보낸다.

     

     

    버튼을 만들어서 간단하게 여러 동작들을 구분지어놨다.

    Signup 버튼을 누르면 회원가입이 되면서 토큰 등을 얻을 수 있다.

    회원가입하기 전에 이메일/비밀번호 가입을 활성화 시켜야한다.

    Login 버튼을 누르면 토큰을 얻을 수 있다.

     

    이 토큰은 로그인 상태에서 할 수 있는 요청들을 할 때 사용된다고한다.

    아직 잘모르기 때문에 좀 더 공부해봐야겠다.

Designed by Tistory.