使用 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 - 如何启用对查询的排序

如何按日期(createdAt)对aws-amplify中列表查询中的字段进行排序?

AWS Amplify,如何检查用户是不是登录?