我正在测试通过使用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 ?? "")")
}
})
}
答案 0 :(得分:1)
您可以分别提取givenName
和familyName
并将它们重新组合为displayName
,如下所示:
if let givenName = appleIDCredential.fullName?.givenName,
let familyName = appleIDCredential.fullName?.familyName {
changeRequest?.displayName = "\(givenName) \(familyName)"
}