IOS。授权后在哪里存储用户数据?

时间:2016-11-11 17:28:58

标签: ios swift rest nsuserdefaults

我有REST APIManager类 - 用于处理服务器api的单例。 有返回用户令牌实体的登录方法;

所有其他API方法都使用令牌发出请求。 登录后我应该在哪里存储该令牌实体? 以及如何在其他API方法中使用该标记?

当然,我可以在NSUserDefaults中存储令牌,并在APIManager中实现这样的方法:

func createNews(news:NewsEntity, token:TokenEntity){
...
}

但我认为从方法中的TokenEntity参数中抽象是个好主意。怎么做?

1 个答案:

答案 0 :(得分:2)

不建议在NSUserDefaults中存储敏感信息。您应该使用Keychain services,而不是:

  

通过对此API进行一次调用,应用程序可以在钥匙串上存储一小部分秘密信息,以后应用程序可以通过一次调用来检索信息。密钥链通过在将数据存储到文件系统之前对其进行加密来保护数据,从而使您无需实施复杂的加密算法。

现在,iOS Keychain提供了一个非常低级的API,因此通常最好使用更高级别的包装器,例如Locksmithkeychain-swift提供的包装器。

例如,使用后者,存储和读取钥匙串就像在做(在完成所需的设置之后)一样简单:

如果您愿意,可以直接使用Apple在上述链接中提供的示例。

let keychain = KeychainSwift()
keychain.set("hello world", forKey: "my key")
keychain.get("my key")

编辑:

对于代码结构,您可以创建一个类来封装令牌以及每个请求所需的任何其他信息。该类将具有例如采用该令牌的init方法;以及一个名为createNews的方法,其简化签名如下:

func createNews(news:NewsEntity) {
    ...

根据你的风格偏好,这可能是从钥匙串(或NSUserDefaults)读取你的令牌的单身人士,虽然这是不可取的。