0

我一直在寻找一种干净、可靠的方式来将当前用户保留在 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,只需进行各种存储库调用,并且数据(存储库/改造服务)层将返回适合当前登录用户等的内容。

抱歉,如果这有点抽象/高级,没有任何特定代码,我只记得几个月前找到了一篇与会话层概念有关的优秀文章,并没有将其添加为书签,现在我正在挠头试图解决干净地实现这一目标的最佳方法。

4

0 回答 0