Android Jetpack compose 如何使用 Auth0 从 OnSuccess 中检索访问令牌?

问题描述 投票:0回答:1

我有一个客户端项目,我需要在创建帐户后从用户凭据中检索访问令牌。我遇到的问题是它只是一个测试,没有存储库或视图模型。我需要直接从登录函数获取访问令牌,并将其提供给调用 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}")
                    
                 
                }
            })
    }
android kotlin android-jetpack-compose auth0
1个回答
0
投票

修改您的登录函数,为将使用访问令牌调用的回调获取附加参数:

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.
}
© www.soinside.com 2019 - 2024. All rights reserved.