ios - 登录 swift ios 应用程序后在哪里存储用户信息

标签 ios swift nsuserdefaults keychain

我在应用程序的开头创建简单的用户登录。用户提交正确的用户名和密码后,来自服务器的脚本应该返回一些参数,我应该将这些参数存储在某种本地数据库中,并在每次新 View 出现/加载时检查这些参数。

我的问题是:

1)我应该使用哪种类型的本地“数据库”,哪个是安全的,这样“外部”的其他人就无法访问它,因为如果有人可以,他就可以自己设置我的登录信息(钥匙串(keychain)、用户默认值等) .)?

2)我应该从服务器返回哪些参数,其中一个在检查用户是否登录时本质上来自安全性 - 我正在考虑用户名和 token - 如果用户成功登录,那么服务器脚本应该创建某种类型的 token ,该 token 将存储在在线数据库中。每次用户从应用程序向服务器发出一些请求时,都会检查 token 是否存在于应用程序中以及服务器数据库中是否存在以及它们是否相等。

3)当应用程序中加载新 View 时,我应该如何检查用户是否登录 - 我应该只检查变量是否存在(例如在钥匙串(keychain)中),还是应该连接到服务器并每次检查服务器数据库?

最佳答案

为了存储敏感的用户数据(密码、API token 、电子邮件),您应该始终使用钥匙串(keychain)来实现此目的。另一方面,有 Realm还提供安全的方式来存储您的数据。它易于使用,您只需要使用领域基(对象)类包装数据对象并使用动态属性标记属性。对于基本登录系统,我认为用户名、电子邮件和 api token 足够好了。但根据 api 需求,您可以在此处包含电话号码、生日等。为了检查用户授权,我认为在大多数情况下验证 api token 就足够了。

还有最安全的技术来提高数据安全性,例如将数据库属性名称保留在钥匙串(keychain)中。在 api 调用中对敏感数据部分进行哈希处理。您需要的最后一件事是使用 https 进行 api 通信。

关于ios - 登录 swift ios 应用程序后在哪里存储用户信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38291772/

相关文章:

ios - 在我的 tableView 中滚动时如何隐藏 collectionView (知道这个 ViewCOntroller 是一半 tableview 和一半 collectionview )

来自 UIImagePicker 的 Iphone 图片不显示

arrays - 如何将数组中的每个字母与另一个数组中的所有字母进行比较? - swift

ios - NSUserDefaults 返回 swift 数组 [String] 而不是 Set<String>

ios - 检查 UserDefault 是否存在 - Swift

IOS Swift 如何在 TableView 中单击时获取元素的值

ios - 从 Testflight 内部测试错误 : Application Verification Failed 安装 Apple Watch 应用程序

ios - 如何在 ios 键盘扩展上显示单词建议栏?

ios - SpriteKit 在碰撞后保持恒定速度

ios - 在 Xcode 11 中分组时无法创建类的实例