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
相关产品推荐
相关产品推荐

