【发布时间】:2019-03-07 03:11:42
【问题描述】:
最近我遇到了一个我无法提出解决方案的问题,我正在按照 Clean Architecture 构建一个 android 应用程序,一切都很好,直到我不得不考虑身份验证角色。
我的应用中有这样的结构(层): [ui](活动和片段)-> [演示文稿](视图模型)-> [域](用例)-> 数据 -> [远程、缓存、数据库]。
现在,假设我想登录我的应用程序,首先我将通过登录屏幕并输入用户凭据,然后我将调用 LoginViewModel,然后调用 LoginUseCase 传递电子邮件和密码。反过来,用例将调用存储库,比如说,进行身份验证,然后我将使用凭据向后端发出请求,如果一切正常,那么我将收到一个我应该以某种方式存储的令牌,问题从这里开始,我创建了一个拦截器,负责从标头获取令牌,但我必须保存它,为此我需要访问共享首选项,在我的拦截器中访问它是否正确?在我必须将其发送到后端的每个请求中,最好的方法是什么?
我也看过这个教程https://medium.com/@tsaha.cse/advanced-retrofit2-part-2-authorization-handling-ea1431cb86be,但我认为在你的应用程序类中访问数据库是不正确的,我错了吗?
感谢大家阅读本文,我正在努力寻找最佳方法,因此欢迎任何帮助。
【问题讨论】:
-
是否可以从 Retrofit 的 Response 类中取回新的令牌?如果是,则在获取 Retrofit 网络结果的存储库模块中,我们可以将此类令牌保存到缓存模块中。
标签: android mvvm kotlin clean-architecture