【问题标题】:how to save authentication state using android viewmodel如何使用android viewmodel保存身份验证状态
【发布时间】:2021-03-18 12:57:29
【问题描述】:

我目前正在构建一个在后端使用 JWT 身份验证的应用程序。因此,每当用户登录或注册时,都会创建新的访问令牌。我将该令​​牌(和用户 ID)保存在 SharedPreferences

因此,在应用程序中,根据功能,用户应该登录才能使用。用户也可以在不登录的情况下使用一些功能。

这就是为什么当用户点击需要身份验证的功能时,我想检查共享首选项中是否有数据。基本上如果没有数据,那么用户没有登录并返回false

fun isAuthenticated():Boolean {
    val user = sharedPreferencesRepository.getUser()
    return user.userId != null && user.token != null
}

但我认为这样做不是有效的方法,因为每次我都应该从共享首选项中获取数据。我只想获取一次并在需要时重复使用它

【问题讨论】:

  • 多次从共享首选项请求数据没有问题。它针对这种用例进行了优化。第一次请求后,数据保存在内存中。

标签: android kotlin sharedpreferences android-viewmodel android-mvvm


【解决方案1】:

您需要创建代表会话的内容并将其存储到您的应用程序处于活动状态时(包括登录/注销时的更新)。

  1. 您创建一个附加到您的应用程序范围的会话类(或您喜欢的任何名称)。如果你使用依赖注入(即 Dagger2 / Hilt 或 Koin),它基本上是一个单例。
  2. 您的 DI 应在应用程序开始时创建此实例,方法是从共享首选项中获取值(如果存在)。
  3. 此实例可以包装在某种存储库(身份验证管理器、用例等)中,并提供(或其包装器,取决于您的架构)给需要此信息的任何类 - 通常是视图模型。
  4. 登录/注销等操作不仅应更新共享首选项,还应触发会话更新。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-17
    • 2023-04-08
    • 1970-01-01
    • 2021-03-04
    • 2019-09-12
    • 2019-12-20
    • 1970-01-01
    • 2011-11-12
    相关资源
    最近更新 更多