如何解决如何使用android viewmodel保存身份验证状态
我目前正在构建一个应用程序,我在后端使用 JWT 身份验证。因此,每当用户登录或注册时,就会创建新的访问令牌。我将该令牌(和用户 ID)保存在 SharedPreferences
因此在应用程序中,根据功能,用户应该登录才能使用。用户也可以在不登录的情况下使用某些功能。
这就是为什么当用户点击需要身份验证的功能时,我想检查共享首选项中是否有数据。基本上如果没有数据,则用户没有登录并返回false
>
fun isAuthenticated():Boolean {
val user = sharedPreferencesRepository.getUser()
return user.userId != null && user.token != null
}
但我认为这不是有效的方法,因为每次我都应该从共享首选项中获取数据。我只想获取一次并在需要时重用它
解决方法
您需要创建一个代表会话的东西,并在您的应用程序处于活动状态时存储它(包括它在登录/注销时的更新)。
- 您创建一个附加到您的应用程序范围的 Session 类(或您喜欢的任何名称)。如果你使用依赖注入(即 Dagger2 / Hilt 或 Koin),它基本上是一个单例。
- 您的 DI 应在您的应用程序启动时创建此实例,方法是从共享首选项(如果存在)获取值。
- 此实例可以围绕某种存储库(身份验证管理器、用例等)进行包装,并提供给(或其包装器,取决于您的架构)提供给需要此信息的任何类 - 通常是视图模型。
- 登录/注销等操作不仅应该更新共享首选项,还应该触发会话更新。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。