我有一个客户端项目,我需要在创建帐户后从用户凭据中检索访问令牌。我遇到的问题是它只是一个测试,没有存储库或视图模型。我需要直接从登录函数获取访问令牌,并将其提供给调用 api 函数的可组合项。使网络调用工作正常的 api 函数,但它需要访问令牌进行授权,并且不知道如何传递它。在 onSuccess 内部,我需要能够保存 result.accessToken 并在 api 调用中使用它。我想使用数据存储,但对于简单的测试来说似乎很复杂。如果有人有想法请告诉我。这是登录功能。
fun login(
account: Auth0,
){
WebAuthProvider.login(account)
.withScheme(getString(context, R.string.com_auth0_scheme))
.withScope("removed for privacy")
//.withScope("removed for privacy")
.withAudience("removed for privacy")
.start(context, object : Callback<Credentials, AuthenticationException> {
override fun onFailure(error: AuthenticationException) {
Log.d("LoginOnFailure", "Failure: ${error.getCode()}")
}
override fun onSuccess(result: Credentials) {
cachedCredentials = result
Log.d("LoginOnSuccess", "Success: ${result.accessToken}")
}
})
}
修改您的登录函数,为将使用访问令牌调用的回调获取附加参数:
fun login(
account: Auth0,
onSuccess: (accessToken: String) -> Unit, // Callback for success
onFailure: () -> Unit // Callback for failure
) {
WebAuthProvider.login(account)
// ... (other configuration)
.start(context, object : Callback<Credentials, AuthenticationException> {
override fun onFailure(error: AuthenticationException) {
Log.d("LoginOnFailure", "Failure: ${error.getCode()}")
onFailure()
}
override fun onSuccess(result: Credentials) {
val accessToken = result.accessToken
Log.d("LoginOnSuccess", "Success: $accessToken")
onSuccess(accessToken)
}
})
}
在您的可组合函数中,您可以调用登录函数并向其传递一个将在成功时执行的 lambda。该 lambda 将接收访问令牌:
@Composable
fun YourApiComposable() {
var accessToken: String? by remember { mutableStateOf(null) }
// Make the login call and handle success and failure
login(
account = yourAuth0Account,
onSuccess = { token ->
accessToken = token
// Now you have the access token, you can make your API call here.
// Example: apiFunction(token)
},
onFailure = {
// Handle the login failure, if needed.
}
)
// Use accessToken as needed in your Composable.
}