android - 将当前登录用户持久保存在干净的 android 架构中的可靠方法是什么?
问题描述
我一直在寻找一种干净、可靠的方式来将当前用户保留在 Android 应用程序中,该应用程序可以从任何活动/视图访问,可以立即使用,并且可以在注销时可靠地清除。
为了添加更多上下文,应用程序通过令牌 (JWT) 处理 API 身份验证。不幸的是,有效载荷中没有用户信息。
有一个MVVM架构,有一个Repository层,调用retrofit api/room db。
这是我正在探索的东西,很想知道是否有更好的方法,或者是否还有我尚未发现的另一种模式/架构:
- 目前,一个
User
对象被持久化在 Application 类上。我个人讨厌这个,这是以前存在的。登录成功后,JWT 存储在 SharedPreferences 中,User 对象作为静态变量保存在 Application 类中。 - 立即有想法至少也将用户的重要位存储在 SharedPreferences 中。我试图找到某种方式将用户与 JWT “捆绑”,但 sharedpreferences 并不能很好地与对象配合使用。我想象一个场景,我可能为一个用户存储了一个令牌,但
User
另一个用户存储了对象,这将导致各种问题。 - 除了我们的改造 API 服务层外,还有一个基本的 Room db 启动,因为我慢慢尝试在整个应用程序中加入本地缓存。所以我知道我可以坚持在
User
这里,尽管担心数据库调用的异步性质。 - 我觉得我所追求的是某种架构层,一个
SesssionManager
或其他东西,它可以处理所有这些。将“持有”用户,令牌,具有全局Logout()
方法,以某种方式与存储库层很好地配合,因此 View 和 ViewModels 根本不需要理会用户或 userId,只需进行各种存储库调用,并且数据(存储库/改造服务)层将返回适合当前登录用户等的内容。
抱歉,如果这有点抽象/高级,没有任何特定代码,我只记得几个月前找到了一篇与会话层概念有关的优秀文章,并没有将其添加为书签,现在我正在挠头试图解决干净地实现这一目标的最佳方法。
解决方案
推荐阅读
- amazon-web-services - 由于线程池太小,Solr 7 未完全删除节点
- selenium - 当我们尝试使用配置文件启动 Firefox 浏览器时,它没有启动
- regex - 正则表达式捕获单词 vlan1 之后和行 100 vlan_mgmt 之前的所有内容
- xslt - Xslt 将元素复制到现有元素,如果不存在则创建新元素
- python - 按顺序排列列表,但删除稍后出现的较低值
- shell - 使用 awk 命令编辑一行中的多个列?
- php - apache2 服务重新启动失败 - 无法启动 apache2.service:未找到单元
- asp.net - 带有文本框和 SQL Server 数据库的 Gridview
- android - 部署失败 - 设备上没有剩余空间
- html - 背景图像无法在平板电脑上调整(横向视图)