我能否通过编程方式创建AWS Cognito用户登录?

7
我希望我的应用程序允许拥有Facebook、Google、Amazon等账户的用户登录。通过AWS Cognito,这种方法可以很好地实现。
然而,如果用户没有这些登录方式,应用程序是否可以通过编程方式创建用户登录?
以下是两种可能的方案:
1. 用户提供ID和密码,应用程序将信息发送到认证提供者以创建新的登录/账户。 2. 不需要实现自己的身份验证机制或担心密码的存储方式等问题。
根据我的研究,使用现有的身份验证提供者或其他服务(如OpenID)无法完成这项任务。
如果我不想实现自己的登录存储和身份验证,你有其他选择吗?它不一定需要与AWS Cognito集成。

使用FB/Google登录难道不会带您到一个页面,您可以在该页面上选择登录或注册吗? - TJ-
我希望用户在注册时可以留在我的应用程序中,而不必打开浏览器或其他应用程序。 - swbandit
2
所有身份验证提供者都不希望第三方应用在其网站上创建帐户。例如,这是一种安全风险,因为您的应用程序将拥有用户的密码(OpenID 的一个目的就是避免这种情况),而像这样的 API 对于垃圾邮件发送者非常有吸引力。 - eug
2个回答

6
我对你的问题有点困惑。 如果您的问题是:
“我能否通过编程方式在Facebook / Google上创建新的用户名和密码?”
那么答案是否定的。 您必须在他们的网站上注册Facebook / Google。 如果您的问题是:
“我可以使用仅存在于Cognito中的用户名和密码创建新用户吗?”
那么答案是肯定的。 要做到这一点,取决于您是在浏览器中还是在服务器上创建用户。 在浏览器中,请使用Cognito Javascript API。 在服务器上,请使用Cognito Admin Server APIs
以下是在Node JS上创建新用户的示例代码(请用您自己的标记替换我的字符串,特别是其中带有@符号的字符串):
  let params = {
    UserPoolId: "@cognito_pool_id@",
    Username: "jhancock",
    DesiredDeliveryMediums: ["EMAIL"],
    ForceAliasCreation: false,
    MessageAction: "SUPPRESS",
    TemporaryPassword: "somePassword",
    UserAttributes: [
      { Name: "given_name", Value: "John"},
      { Name: "family_name", Value: "Hancock"},
      { Name: "name", Value: "John Hancock"},
      { Name: "email", Value: "john@gmail.com"},
      { Name: "phone_number", Value: "+15125551212"}
    ],
  };
  console.log("Sending params to cognito: " + JSON.stringify(params));
  let cognitoIdentityServiceProvider = new AWS.CognitoIdentityServiceProvider({region: "us-east-1"});
  cognitoIdentityServiceProvider.adminCreateUser(params, function(error, data) {
    if (error) {
      console.log("Error adding user to cognito: " + JSON.stringify(error), error.stack);
    } else {
      console.log("Received back from cognito: " + JSON.stringify(data));
    }
 }

一旦您使其正常工作,您可能会想看看如何将临时密码更改为真实密码的帖子。


1
我认为原帖的提问者是在询问Cognito联合身份,因为该问题来自2014年,而用户池直到2016年才推出,但这也是用户池的一个有效答案。 - Jeff Bailey
好的。去年底我第一次了解Cognito时,发现了这个问题,让我感到非常困惑,因为你不能在Cognito中拥有用户。很高兴现在已经改善了。 - Ryan Shillington

0

你好,根据我以前实现社交媒体认证的经验,我得出结论:这是相当困难的。如果您不想在iOS中显示Web视图来验证用户,则需要使用iOS ACAccountStore类,但即使如此,它也只能提供登录而不能提供注册。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接