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

Android端AWS Facebook登录后用户池未创建用户的问题咨询

解决AWS Cognito用户池未创建Facebook登录用户的问题

我之前也踩过这个坑!你当前的代码只是完成了**Cognito身份池(Identity Pool)的Facebook身份验证,所以只会生成身份ID,但不会触发用户池(User Pool)**的用户创建。问题出在流程上:你需要把身份池和用户池的联合认证链路打通,并且代码要先通过Facebook Token换取用户池的认证凭证,再去身份池获取权限。

第一步:检查Cognito配置是否正确

首先得确保你的用户池和身份池的关联配置没问题:

  • 用户池端:添加Facebook作为身份提供商,填写正确的Facebook App ID、App Secret,授权范围至少勾选public_profile和email;同时确保用户池的App Client启用了联合身份认证,回调URL配置正确。
  • 身份池端:关联你的Cognito用户池作为身份提供商(而不是直接添加Facebook作为身份提供商),并配置好对应的用户池ID和App Client ID。

第二步:修改代码逻辑,走用户池联合认证流程

你现在直接把Facebook Token传给身份池的logins是不对的,正确的流程是先通过Facebook Token换取Cognito用户池的Token,再用这个用户池Token去身份池获取凭证。这样用户池才会自动创建关联Facebook的用户条目。

示例代码如下:

// 1. 初始化Cognito用户池
CognitoUserPool userPool = new CognitoUserPool(
        getApplicationContext(),
        "YOUR_USER_POOL_ID",
        "YOUR_APP_CLIENT_ID",
        "YOUR_APP_CLIENT_SECRET",
        Regions.YOUR_AWS_REGION
);

// 2. 准备Facebook认证参数
Map<String, String> authParams = new HashMap<>();
authParams.put("graph.facebook.com", AccessToken.getCurrentAccessToken().getToken());

// 3. 发起用户池的联合认证请求
userPool.getClient().initiateAuth(new InitiateAuthRequest()
                .withAuthFlow(AuthFlowType.FEDERATED_AUTH)
                .withAuthParameters(authParams)
                .withClientId("YOUR_APP_CLIENT_ID"))
        .continueWithTask(task -> {
            if (task.isSuccessful()) {
                InitiateAuthResult authResult = task.getResult();
                // 获取用户池的ID Token(这是关键,要传给身份池)
                String cognitoIdToken = authResult.getAuthenticationResult().getIdToken();

                // 4. 用用户池ID Token配置身份池的logins
                Map<String, String> identityLogins = new HashMap<>();
                String userPoolDomain = "cognito-idp." + Regions.YOUR_AWS_REGION.getName() + ".amazonaws.com/" + "YOUR_USER_POOL_ID";
                identityLogins.put(userPoolDomain, cognitoIdToken);
                
                credentialsProvider.setLogins(identityLogins);
                // 刷新身份池凭证
                return credentialsProvider.refresh();
            } else {
                // 处理认证失败的情况
                throw task.getException();
            }
        });

关键注意点

  • 不要直接将Facebook Token传给身份池的logins,必须先通过用户池的FEDERATED_AUTH流程换取用户池的ID Token,再用这个Token关联身份池。
  • 确保用户池的App Client没有开启“阻止新用户注册”的选项(默认是允许注册的),否则用户池不会自动创建新用户。
  • 验证用户池的身份提供商配置时,要确认Facebook的回调URL和你在Facebook开发者后台设置的一致,否则会认证失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:26:33