用户凭据-使用Apple登录(SwiftUI)

时间:2020-11-12 09:58:44

标签: swift google-cloud-firestore firebase-authentication swiftui sign-in-with-apple

我正在测试通过使用Apple登录向Firebase注册用户。我有基本的设置,可以查看here

在我的具有凭据方法的Auth.auth().sign(_:)中,我试图从.fullName中提取appleIDCredential,以便以后用于标识用户。

这是:didCompleteWithAuthorization中我的func authorizationController(_:)委托方法中的代码:


 let credential = OAuthProvider.credential(withProviderID: "apple.com",
                                                      idToken: idTokenString,
                                                      rawNonce: nonce)
            
            Auth.auth().signIn(with: credential) { (authResult, error) in
                if error != nil {
                    print(error!.localizedDescription)
                    return
                }
                
                if let _ = authResult?.user {
                    let changeRequest = authResult?.user.createProfileChangeRequest()
                    changeRequest?.displayName = appleIDCredential.fullName?.description
                    changeRequest?.commitChanges(completion: { (error) in

                        if let error = error {
                            print(error.localizedDescription)
                        } else {
                            print("Updated display name: \(Auth.auth().currentUser!.displayName!)")
                        }
                    })
                }
            }

我在.description上使用.fullName仅获取方法来获取返回的凭证的文本表示形式,它是认证时用户的全名。

但是最后的displayName包括文字的namedName和familyName前缀,即;


givenName: David familyName: Example

我尝试将字符串分成四个元素的数组,并进行过滤,但是没有运气。

我想从凭证中返回David Example,该凭证是认证时的用户名。

解决方案


    if let _ = authResult?.user {
                    let changeRequest = authResult?.user.createProfileChangeRequest()
                    
                    if let givenName = appleIDCredential.fullName?.givenName,
                       let familyName = appleIDCredential.fullName?.familyName {

                       changeRequest?.displayName = "\(givenName) \(familyName)"
                    }
                                    
                    changeRequest?.commitChanges(completion: { (error) in

                        if let error = error {
                            print(error.localizedDescription)
                        } else {
                            print("Updated display name: \(changeRequest?.displayName ?? "")")
                        }
                    })
                }

1 个答案:

答案 0 :(得分:1)

您可以分别提取givenNamefamilyName并将它们重新组合为displayName,如下所示:

if let givenName = appleIDCredential.fullName?.givenName,
   let familyName = appleIDCredential.fullName?.familyName {

   changeRequest?.displayName = "\(givenName) \(familyName)"
}