使用 AWS Amplify 对 Google 登录进行身份验证 - federatedSignin 返回 null?
Posted
技术标签:
【中文标题】使用 AWS Amplify 对 Google 登录进行身份验证 - federatedSignin 返回 null?【英文标题】:Using AWS Amplify to authenticate Google Sign In - federatedSignin returns null? 【发布时间】:2018-09-03 12:20:48 【问题描述】:我正在尝试使用 AWS Amplify 来支持电子邮件/密码和 Google 身份验证。现在,我想将来自 Google 的详细信息存储到我在 AWS 中的用户池中。我不明白这里的流程 - 我阅读了很多博客文章,但大多数都令人困惑。
这是我尝试做的:
// gapi and Amplify included
googleSigninCallback(googleUser =>
const googleResponse = googleUser.getAuthResponse();
const profile = googleUser.getBasicProfile();
const name = profile.getName();
const email = profile.getEmail();
Amplify.Auth.federatedSignin('google', googleResponse, email, name)
.then(response => console.log(response); ) // is always null
.catch(err => console.log(err));
);
在 DevTools 中,我在网络选项卡中的请求中有以下错误:
"__type":"NotAuthorizedException","message":"未经身份验证的访问 此身份池不支持。"
为什么我应该启用对该池的未经身份验证的访问?我不想。
我这样做对吗?将 Google 用户详细信息存储到 AWS 用户池中是否有可能或者是一种好习惯?如果这不是一个好习惯,那又是什么呢?
另外,如果我想在应用程序中向用户询问 Google 未提供的更多详细信息并存储它们,如果我们无法将用户存储在用户池中怎么办?
【问题讨论】:
如果不使用 cognito 应用集成,您无法将来自 Google 的详细信息存储到用户池中。看到这个:github.com/aws/aws-amplify/issues/703#issuecomment-383159143 我也遇到同样的问题,你能解决吗? 不。我做不到。 还有其他方法可以在 google 和 cognito 之间进行联合登录吗? 【参考方案1】:首先确保您的身份池和用户池已设置为 google 身份验证。
那么 federatedSignIn 的最后一个 I 是大写的。
最后只需将调用中的第二个参数更改为 federatedSignIn,如下所示:
Amplify.Auth.federatedSignIn('google',
token: googleResponse.id_token,
expires_at: googleResponse.expires_at
, email, name)...
【讨论】:
以上是关于使用 AWS Amplify 对 Google 登录进行身份验证 - federatedSignin 返回 null?的主要内容,如果未能解决你的问题,请参考以下文章
AWS Amplify AppSync 使用在 Cognito 中创建的 Google 用户登录
如何在我的 Vuejs 项目中迁移 aws-amplify 以使用 Typescript?
通过 aws Amplify 使用 Storage 类对本机图像上传进行反应
带有 AWS Amplify 的 GraphQL - 如何启用对查询的排序