如何解决用户凭据-使用Apple登录SwiftUI
我正在测试通过使用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 ?? "")")
}
})
}
解决方法
您可以分别提取givenName
和familyName
并将它们重新组合为displayName
,如下所示:
if let givenName = appleIDCredential.fullName?.givenName,let familyName = appleIDCredential.fullName?.familyName {
changeRequest?.displayName = "\(givenName) \(familyName)"
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。