如何使用android视图模型保存身份验证状态



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

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

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

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

但我认为这不是一种有效的方法,因为每次我都应该从共享的偏好中获取数据。我只想得到一次,并在需要时重复使用

您需要创建表示会话的东西,并在应用程序处于活动状态时存储它(包括登录/注销时的更新(。

  1. 您创建了一个附加到应用程序范围的Session类(或您喜欢的任何名称(。如果使用依赖注入(即Dagger2/Hilt或Koin(,那么它基本上是一个单例
  2. DI应该在应用程序开始时通过从共享prefs中获取值来创建这个实例(如果存在的话(
  3. 该实例可以封装在某种存储库(身份验证管理器、用例等(中,并提供(或其包装器,取决于您的体系结构(给任何需要该信息的类——通常是视图模型
  4. 诸如登录/注销之类的操作不仅应该更新共享pref,而且应该触发会话更新

最新更新