微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用户凭据-使用Apple登录SwiftUI

如何解决用户凭据-使用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 ?? "")")
                        }
                    })
                }

解决方法

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。