当前位置: 首页 > 知识库问答 >
问题:

使用架构组件MVVM进行身份验证,将令牌从存储库传递到ViewModel

雍骏俊
2023-03-14

我想做一个基于“官方”MVVM、存储库模型的登录活动。

我已经看过Android Studio的“登录”模板,并多少理解了它的工作原理。下面的流程图显示了我如何规划类之间的数据流。该模板不包括WebService部分,而是立即返回令牌,而无需回调。

由于创建对VM/活动的引用(在回调中)是一种不好的做法,那么将令牌传播回VM(用虚线箭头表示)的选项是什么?

注意事项:

  1. 从VM到活动,数据使用LiveData传递。我理解这一步。
  2. 我想过在存储库中创建LiveData,然后在活动中观察到,跳过虚拟机。然而,肯定需要对来自存储库的任何数据进行一些逻辑处理,所以它应该首先通过虚拟机,在那里进行处理,然后由活动观察到派生结果。
  3. 似乎很难使用LiveData将数据从存储库传递到VM,因为VM中的任何调用都需要合适的上下文。似乎只有活动可以。观察?
  4. 为了更好地理解,我宁愿暂时避免使用RxJava和Dagger,而在Java工作。

谢谢

共有1个答案

颜熙云
2023-03-14

您不需要在存储库中创建LiveData。相反,您可以从VM调用存储库。登录(u,p)并等待结果到达。结果出来后,只需更新虚拟机中的LiveData实例。

无论如何,网络调用必须异步完成,或者您可以使用来自网络库(如Retrofit)的回调机制。

您的ViewModel将如下所示(伪代码):

class LoginViewModel: ViewModel{

    LiveData<Result> login(String username, String password){

        LiveData<Result> resultLiveData = new MutableLiveData<Result>();

        // Let it be an async. call from Retrofit
        Repository.login(username, password, new Callback<Result>{
            void onResult(Result result){
                resultLiveData.value = result  // update the livedata.
            }
        }

        return resultLiveData;

    }

}
 类似资料:
  • 我有一个从https://github.com/Azure-Samples/ms-identity-blazor-wasm/tree/main/WebApp-graph-user/Call-MSGraph.创建的blazor网络组装项目 它基本上是您使用时创建的项目。用于Blazor应用程序的net core模板,该应用程序通过AD B2B进行身份验证 然后我能够调用graph。用户登录时的api

  • 致命:“https://github.com/scuzzlebuzzle/ol3-1.git/'”身份验证失败

  • 我遵循教程系列:https://www.callicoder.com/spring-boot-security-oauth2-social-login-part-1/这是最好的教程,但是令牌不存储在数据库中,令牌的格式不适合我。 我需要一个访问令牌和刷新令牌,例如: 在通过谷歌(google)等社交账户进行身份验证后,我通过手动创建令牌,并重定向以获取令牌的一些数据,但令牌无效。 我收到回应 我有

  • 我是Swagger的新手。 我使用Swagger UI来生成Swagger文档。我有两个API调用。第一个调用是基于用户名和密码生成令牌。第二次调用需要第一次调用生成的令牌。 我如何使用Swagger UI设置第二次调用的令牌?

  • 我想使用我的GitLab帐户中的私有令牌克隆GitLab存储库,而不提示输入我的自动化脚本。 有人能给我一个样品吗? 我知道我可以使用用户和密码执行此操作: 我知道使用ssh密钥是可能的 但是,这两种选择都是不够的。

  • 我正在尝试为我的应用程序构建一个身份验证解决方案。我使用React作为前端,使用API模式下的Rails作为后端。我有一个外部身份验证解决方案,我需要使用它。我无意中发现了Knock for JWT令牌管理,但我不理解文档,尤其是这部分“它必须有一个身份验证方法,类似于has_secure_password添加的方法”,因为由于我的外部身份验证服务,我没有用户模型。因此,在我的头脑中,登录请求将发