我目前正在尝试在我的 React Native 项目中使用
@react-native-google-signin
库来登录我的应用程序中的用户,然后使用 was-amplify 在我的 cognito 用户池上对他进行身份验证。所以基本上不使用托管 UI
目前,我的应用程序中有这个:
function GoogleSignInButton() {
const handleGoogleSignIn = async () => {
const {idToken, user} = await GoogleSignin.signIn();
const jwtClaims = parseJwt(idToken);
const googleCredentials = await Auth.federatedSignIn('google', { token: idToken, expires_at: jwtClaims.exp }, user);
};
render(
<Button title={'Google Sign In'} onPress={handleGoogleSignIn}/>
);
}
GoogleSignIn 部分工作完美,并正确返回 idToken 和用户属性。
但是,当我调用 Auth.federatedSignIn(...) 时,返回了错误:
NotAuthorizedException:令牌不是来自此身份池支持的提供商。
我非常确定我正确配置了 AWS Cognito 用户池,因为如果我访问托管 UI,我可以成功登录并注册用户
我将 google 配置为我的用户池中的联合身份提供商
我还看到了一些令人困惑的文档,这些文档导致我将谷歌身份提供商添加到链接到我的用户池的身份池中,如下所示:
但是,我收到了这个错误:
InvalidIdentityPoolConfigurationException:身份池配置无效。检查为此池分配的 IAM 角色。
这让我相信这可能不是正确的方向。
那么回到最初的问题:它怎么可能没有意识到令牌来自谷歌,而谷歌是指定的身份提供商?
我也尝试过这个解决方案并得到了与你相同的结果。我建议观看此视频第 4.1 课 OAuth 和 React Native(Google 登录)。据我了解,我们需要使用左侧菜单中的
Identity pools
。
此外,我尝试了另一种解决方案 React Native App Auth ,结果相同。