IOS.授权后存储用户数据的位置



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

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

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

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

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

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

通过对这个API的一次调用,应用程序可以在钥匙链上存储少量的秘密信息,之后应用程序可以从中检索信息——也是通过一次调用。密钥链通过在将数据存储到文件系统之前对其进行加密来保护数据,从而使您无需实现复杂的加密算法。

现在,iOS Keychain提供了一个相当低级的API,所以通常最好使用更高级别的包装器,比如Locksmith或Keychain -swift提供的包装器。

例如,使用后者,存储和读取密钥链非常简单(在需要的设置之后):

如果你愿意,你可以直接使用上面链接中苹果公司提供的示例。

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

至于代码结构,您可以创建一个类来封装每个请求所需的令牌和任何其他信息。该类将具有,例如,一个获取令牌的init方法;以及createNews方法,其简化签名如下:
func createNews(news:NewsEntity) {
    ...

根据你的风格偏好,这可以是单例读取你的令牌从钥匙链(或NSUserDefaults,尽管这是不可取的)。

相关内容

最新更新