You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android应用Amplify Auth登录时accessToken为null的问题求助

解决Amplify Auth重启模拟器后登录报accessToken为空的问题

这个问题的核心是Amplify Auth的本地会话缓存在模拟器重启后出现损坏,导致再次登录时尝试使用空的accessToken参数触发校验错误。以下是几种可行的修复方案:

1. 登录前校验会话状态,清理无效缓存

在发起登录请求前,先主动检查当前的认证会话状态,一旦发现缓存的会话无效(比如accessToken为空),强制登出清理本地缓存后再重新登录。示例代码如下:

// 检查会话状态并处理登录
private void checkSessionAndLogin() {
    Amplify.Auth.fetchAuthSession(
        result -> {
            if (!result.isSignedIn()) {
                // 用户未登录,直接执行登录流程
                performLogin();
                return;
            }

            // 校验Cognito会话中的accessToken有效性
            if (result.getData() instanceof AWSCognitoAuthSession) {
                AWSCognitoAuthSession cognitoSession = (AWSCognitoAuthSession) result.getData();
                AuthToken accessToken = cognitoSession.getAccessToken();
                if (accessToken.getValue() == null || accessToken.getValue().isEmpty()) {
                    // 缓存的accessToken为空,强制登出清理缓存
                    Amplify.Auth.signOut(
                        signOutRes -> performLogin(),
                        signOutErr -> {
                            // 登出失败也直接尝试登录
                            performLogin();
                        }
                    );
                } else {
                    // 会话有效,跳转至主页
                    navigateToHomeScreen();
                }
            } else {
                // 未知会话类型,直接登录
                performLogin();
            }
        },
        error -> {
            // 获取会话失败,清理缓存后重试登录
            Amplify.Auth.signOut(
                signOutRes -> performLogin(),
                signOutErr -> performLogin()
            );
        }
    );
}

// 你的登录逻辑
private void performLogin() {
    Amplify.Auth.signIn(
        "username",
        "password",
        result -> {
            if (result.isSignInComplete()) {
                navigateToHomeScreen();
            }
        },
        error -> {
            // 处理登录错误
        }
    );
}

2. 检查Amplify缓存配置

打开amplifyconfiguration.json文件,确认Auth模块的缓存配置是否正确启用了持久化存储:

  • 确保Cognito配置中的storage项使用的是安全持久化方式(比如EncryptedSharedPreferences),避免模拟器重启后缓存丢失。
  • 检查应用的AndroidManifest.xml是否添加了必要权限:
    <uses-permission android:name="android.permission.INTERNET" />
    

3. 升级Amplify SDK版本

这个错误可能是SDK的已知bug,建议升级到最新稳定版的Amplify Auth库。在项目的build.gradle(Module级别)中更新依赖:

dependencies {
    implementation 'com.amplifyframework:aws-auth-cognito:2.14.0' // 替换为最新版本
    implementation 'com.amplifyframework:core:2.14.0'
}

4. 规避模拟器存储异常

模拟器的临时存储偶尔会出现读写异常,导致Amplify无法正常维护缓存:

  • 尽量使用带有持久化存储的模拟器实例,避免使用临时创建的模拟器。
  • 确保应用的数据目录拥有正确的读写权限,可在模拟器设置中检查应用存储权限是否开启。

内容的提问来源于stack exchange,提问作者k1r4n

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 18:05:11