保存 swiftUI 的用户凭据 - 密码 ActionSheet 调用

Posted

技术标签:

【中文标题】保存 swiftUI 的用户凭据 - 密码 ActionSheet 调用【英文标题】:save user credentials for swiftUI - password ActionSheet call 【发布时间】:2021-06-30 12:03:51 【问题描述】:

我有一个 SwiftUI 应用程序,其中包含两个文本字段和一个用于登录的登录按钮:

    VStack 
            ZStack 
                        Liquid()
                            .frame(width: 240, height: 240)
                            .foregroundColor(.blue)
                            .opacity(0.3)


                        Liquid()
                            .frame(width: 220, height: 220)
                            .foregroundColor(.blue)
                            .opacity(0.6)

                        Liquid(samples: 2)
                            .frame(width: 200, height: 200)
                            .foregroundColor(.blue)
                        
                        Text("Refinance").font(.largeTitle).foregroundColor(.white)
                    
            VStack 
                HStack
                    Image(systemName: "envelope")
                        .foregroundColor(.gray)
                    TextField("Email", text: $email)
                        .textContentType(.username)
                
                .padding()
                .background(RoundedRectangle(cornerRadius: 8).fill(textFieldColor))
                .padding(.vertical, 10)
                HStack
                    Image(systemName: "lock")
                        .foregroundColor(.gray)
                    SecureField("Password", text: $password)
                        .textContentType(.password)
                
                .padding()
                .background(RoundedRectangle(cornerRadius: 8).fill(textFieldColor))
                .padding(.vertical, 10)
                Button(action:  login() ) 
                    Text("Sign in")
                        .font(.headline)
                        .foregroundColor(.white)
                        .padding()
                        .frame(width: 180, height: 40)
                        .background(Color.blue)
                        .cornerRadius(15.0)
                        
                

您可以在代码中看到我为每一个都分配了 textContextType。

我已经创建了 apple-app-site-association 文件,并将它上传到我的服务器,(并使用 branch.io AASA 检查)以确保它被正确调用。 我还将此 Web 凭据域添加到我的应用权利中。

当我构建我的应用程序时,我可以选择从钥匙串中检索用户名和密码,但是我无法保存密码。如果我卸载应用程序并首次启动,系统不会提示我保存密码。

我的登录功能将我的用户名和密码发送到 firebase 登录,因此当前没有代码通知钥匙串在按下登录按钮时执行某些操作。

我找不到任何与使用 SwiftUI 执行此操作相关的内容。然而,迅速找到了这个文档: https://developer.apple.com/documentation/security/keychain_services/keychain_items/adding_a_password_to_the_keychain

有人可以确认此方法是否最适合使用 swiftUI 保存用户凭据,或者是否还有其他我应该参考的内容。

【问题讨论】:

Keychain 是 Apple 用于安全存储凭据的解决方案。根据文档。 我想让我感到困惑的是我不明白 webcredentials 和钥匙串之间的联系。使用钥匙串保存用户凭据是一回事,但我看不出钥匙串如何知道密码是用于此应用程序的。还是在保存钥匙串项时与后台域相关联? 你必须把这一切都说出来,然后去做。看文档,看有没有wwdc视频,找教程。 【参考方案1】:

您可以使用AppStorage 来保存用户凭据、用户首选项、用户设置等小数据。

它非常易于使用。这是演示:

@AppStorage("username") var username: String = "dc7"

【讨论】:

UserDefaults/AppStorage 被认为是最不安全的存储形式之一。你不应该在那里存储密码。默认系统的目的是让应用程序自定义其行为以匹配用户的偏好。不是凭据。

以上是关于保存 swiftUI 的用户凭据 - 密码 ActionSheet 调用的主要内容,如果未能解决你的问题,请参考以下文章

Windows清除共享保存的用户名密码记录

jenkins获取凭据密码的方法

将凭据/令牌保存在 cookie 中?

如何保存数据库用户名和密码Spring boot项目[重复]

16:跳过密码保存,因为可能会提示用户使用 Android Autofill

使用 Web 组件在登录页面中保存凭据