React-Native/Amplify:为已有用户关联社交账号
解决Amplify Auth关联社交账号时的"There is already a signed in user"错误
问题原因
signInWithRedirect 是用于用户首次登录或切换登录身份的方法,当已有用户处于登录状态时调用它,就会抛出该异常。关联已有用户的社交账号需要使用专门的身份关联API,而非通用登录方法。
解决方案
1. 获取社交身份凭证
先通过社交授权流程获取第三方身份凭证,避免触发Amplify自动登录逻辑:
import { Auth } from 'aws-amplify'; const getSocialCredentials = async (provider) => { // 触发社交授权跳转,获取授权凭证 const authResult = await Auth.federatedSignIn({ provider }); return authResult?.credentials; };
2. 关联社交账号到当前用户
拿到社交凭证后,调用linkFederatedIdentity方法完成关联:
const linkSocialAccount = async (provider) => { try { const socialCreds = await getSocialCredentials(provider); await Auth.linkFederatedIdentity(socialCreds); console.log("社交账号关联成功"); } catch (error) { console.error("关联失败:", error); } };
3. 验证关联状态
关联完成后,可通过以下代码查看当前用户的关联身份列表:
const checkLinkedIdentities = async () => { const session = await Auth.fetchAuthSession(); console.log("已关联的社交身份:", session.idToken.payload.identities); };
注意事项
- 确保Cognito用户池已配置对应社交身份提供商(如Google、Facebook),且Amplify配置文件中正确引入了该提供商的参数。
- 若出现"Identity already exists"错误,说明该社交账号已绑定到其他用户,需提示用户先解绑原关联再尝试。
内容的提问来源于stack exchange,提问作者Hamza Najib
相关产品推荐
相关产品推荐

