前言
今天我们利用 KComponent 实现一个自动登录验证的功能. 我们很多的页面在进入之前都可能需要前置条件. 而我们常见的就是进入之前需要登录、权限等
今天就带大家实现一个自动完成登录的功能
准备工作
- 首先你已经有了一个 user/login 为路由地址的登录界面. 在登录成功之后会通过 Activity setResult 返回 RESULT_OK
- 假设你有一个界面, 他需要登录才能进入. 它的路由地址为: order/detail
实现自动登录的拦截器
class AutoLoginRouterInterceptor: RouterInterceptor {
override suspend fun intercept(chain: RouterInterceptor.Chain): RouterResult {
val context = chain.request().rawAliveContext ?: throw NullPointerException("context is null")
// 如果没有登录, 就跳转去登录, 并且等待 RESULT_OK 的结果, 否则就错误返回
if(App 没有登录) {
Router
.with(context = context)
.hostAndPath(hostAndPath = "user/login")
.requestCodeRandom()
.resultCodeMatchAwait(expectedResultCode = Activity.RESULT_OK)
}
return chain.proceed(request = chain.request())
}
}
声明目标界面的路由, 并且绑定自动登录拦截器
@RouterAnno(
hostAndPath = "order/detail",
interceptors = [AutoLoginRouterInterceptor::class],
)
class OrderDetailAct: AppCompatActivity {
// xxxxxx
}
此时, 所有跳转到 "order/detail" 的路由, 都会保证完成登录的验证