Firebase не создает UID учетной записи Facebook с использованием идентификатора пользователя приложения Facebook

Я разрабатываю приложение для iOS в swift, которое требует, чтобы пользователь создал учетную запись, подключив свою учетную запись Facebook. Месяц назад, когда я проводил тестирование, зарегистрировавшись со своей учетной записью Facebook, UID пользователя, созданный Firebase, был в формате "facebook:(идентификатор приложения facebook)". Это было то, что я хотел.

Однако в последнее время всякий раз, когда пользователь создает новую учетную запись, подключая свою учетную запись Facebook к моему приложению, Firebase создает пользовательский UID с использованием случайной строки. Например: "E9FaL87wRmOKfhen2S6yszhCwtx1". Может ли это быть из-за нового обновления Firebase? Должен ли я пройти процесс миграции?

Вот мой код для создания учетной записи:

@IBAction func facebookAuthAction(sender: AnyObject) {
    let facebookLogin = FBSDKLoginManager()

    facebookLogin.logInWithReadPermissions(nil, fromViewController: nil, handler: {(facebookResult, facebookError) -> Void in

        if facebookError != nil {
            print("Facebook login failed. Error \(facebookError)")
        } else if facebookResult.isCancelled {
            print("Facebook login was cancelled.")
        } else {
            let accessToken = FBSDKAccessToken.currentAccessToken().tokenString

            FIREBASE_REF.authWithOAuthProvider("facebook", token: accessToken, withCompletionBlock: { error, authData in

                    if error != nil {
                        print("Login failed. \(error)")
                    } else {
                        print("Logged in! \(authData)")
                        NSUserDefaults.standardUserDefaults().setValue(authData.uid, forKey: "uid")

                        FIREBASE_REF.childByAppendingPath("users").observeEventType(.Value, withBlock: {snapshot in
                            if snapshot.hasChild(authData.uid) == false {
                                self.createNewFBUser(authData.uid)
                            }
                        })

                        self.performSegueWithIdentifier("loginSegue", sender: self)
                    }
            })
        }
    })
}

func createNewFBUser(uid: String) {
    var emailAddress:String = ""
    var firstName:String = ""
    var lastName:String = ""
    var pictureURL:String = ""

    let parameters = ["fields": "email, first_name, last_name, picture.type(large)"]
    FBSDKGraphRequest(graphPath: "me", parameters: parameters).startWithCompletionHandler {(connection, result, error) -> Void in

        if error != nil {
            print(error)
            return
        }

        if let email = result["email"] as? String {
            emailAddress = email
        }
        if let first_name = result["first_name"] as? String {
            firstName = first_name
        }
        if let last_name = result["last_name"] as? String {
            lastName = last_name
        }
        if let picture = result["picture"] as? NSDictionary, data = picture["data"] as? NSDictionary, url = data["url"] as? String {
            pictureURL = url
        }

        let newUser = [
            "provider": "facebook",
            "firstName": firstName,
            "lastName": lastName,
            "email": emailAddress,
            "picture": pictureURL
        ]
        FIREBASE_REF.childByAppendingPath("users").childByAppendingPath(uid).setValue(newUser)
    }
}

1 ответ

Решение

Когда вы обновляете свой проект до новой Firebase Console, ваши пользователи переносятся в новый бэкэнд аутентификации.

Вновь созданные пользователи после обновления получат идентификатор в новом формате. См. Этот пост в группе Firebase-Talk для получения дополнительной информации об изменениях и о том, когда они также будут применены к существующим (не обновленным) приложениям Firebase.

Обратите внимание, что Firebase рекомендовал против в зависимости от формата uid годами. Лучше всего рассматривать его как непрозрачную строку, которая идентифицирует пользователя.

Другие вопросы по тегам