1

방금 ​​Firebase App에 Facebook 로그인 기능을 통합했습니다. FIRDatabase에서 사용자에게 몇 가지 추가 정보를 추가하고 싶습니다. 그 이유는 내 firebase 데이터베이스 식별자로 uid를 가진 하위 사용자를 추가합니다.Firebase에 페이스 북 사용자의 uid를 저장하는 방법은 무엇입니까?

사용자가 페이스 북없이 "일반"가입 기능을 사용하면 모든 것이 버터처럼 부드럽게 작동합니다. 그러나 Facebook 등록 양식에 동일한 정보를 추가 했으므로 선택 값을 언 래핑하는 동안 예기치 않게 nil을 신속하게 발견 할 때 발생하는 치명적인 오류가 발생합니다.

나는 그것이 내가 FIR 데이터베이스에 추가 할 사용자 이름이어야한다는 것을 알고 있습니다. 그러나 나는 다른 곳에서 uid를 얻는 방법을 아직 알지 못했습니다.

var FirebaseUId: String! 
func showEmailAddress() { 
    let accessToken = FBSDKAccessToken.current() 
    guard let accessTokenString = accessToken?.tokenString else {return} 

    let credentials = FIRFacebookAuthProvider.credential(withAccessToken: accessTokenString) 

    FIRAuth.auth()?.signIn(with: credentials, completion: { (user, error) in 
     if error != nil { 
      print("Something went wrong with our FB user:", error ?? "") 
      return 
     } 
     print("succesfullex logged in with our user: ", user ?? "") 
     self.FirebaseUId = user?.uid 
    }) 
    FBSDKGraphRequest(graphPath: "/me", parameters: ["fields": "id, name, email"]).start { (connection, result, err) in 
     if err != nil { 

      return 

     } 
     print(result ?? "") 
     let data = result as! [String : AnyObject] 
     let email = data["email"] as? String 
     let username = data["name"] as? String 

     let userInfo: [String : Any] = ["uid" : self.FirebaseUId! , 
             "username" : username!, 
             "Email" : email!, 
             "Passwort" : " ", 
             "Geschlecht" : " ", 
             "urltoImage" : " ", 
             "FußballPreferenz" : " ", 
             "BasketballPreferenz" : " ", 
             "FußballBesitz" : " ", 
             "BasketballBesitz" : " ", 
             "LeibchenBesitz" : " "] 
     var ref: FIRDatabaseReference! 
     ref = FIRDatabase.database().reference() 

     ref.child("users").child(self.FirebaseUId).setValue(userInfo) 

    } 


} 

답변

0

이렇게하면 수행하려는 작업이 완료된 것입니다.

//this is what we need to save to FB 
    FBSDKGraphRequest(graphPath: "/me", parameters: ["fields": "id, name, email"]).start { //this gets info 
     (connection, result, err) in 

     if err != nil { 
      print("graph failed", err as Any) 
      return 
     } 

    Auth.auth().signIn(with: credential, completion: { (user, error) in //this logs you in 
     if error != nil { 
      print("something wrong", error as Any) 
      return 
     } 
     let uid = user?.uid 

     let ref = Database.database().reference()    //below adds the info to the db 
     let usersRef = ref.child("users").child(uid!) 

     usersRef.updateChildValues(result as! [AnyHashable : Any]) 

     print("userID", uid as Any) 
     }) 

    } 

당신은 당신의 기호에서 UID를 당길 수 있도록 그래프 요청 내부의 로그인 절차를 마무리해야하고, 또한 graphrequest에서 정보에 액세스합니다. 이렇게하면 Google과 같은 다른 로그인 방법도 사용할 수 있으며 올바른 uid를 계속 가져올 수 있습니다.

관련 문제