我希望允许用户使用用户池标识(电子邮件+密码)或Facebook联合身份进行注册。
但我也希望他们以后可以切换:如果他们最初没有使用Facebook注册就添加Facebook联盟,或者如果他们最初使用Facebook注册,则从他们的帐户中删除Facebook链接。< / p>
这可能吗?
提前致谢!
答案 0 :(得分:3)
是的,确实如此。我假设Facebook作为IdP直接添加到Userpool。
将您的查询拆分为两部分:
<强> 1。用户使用用户名&amp;密码。后来,他想把他的Facebook账号链接
这很简单。在您的界面中提供一个选项,并使用AdminLinkProviderForUser API将Facebook / Google帐户与用户相关联。现在,当用户下次使用此Facebook / Google帐户登录时,Cognito会将其视为本机用户&amp;为此生成令牌。当然,Facebook信息将在身份声明中提及。如果用户希望稍后删除此Facebook / Google链接,则可以使用AdminDisableProviderForUser API调用。
<强> 2。用户使用Facebook注册
这有点棘手,因为Facebook登录会自动在您的Userpool中创建状态为EXTERNAL_PROVIDER的用户(与具有CONFIRMED状态的本机用户不同)。顾名思义,此用户只能使用相关的外部提供商登录 - 在这种情况下是Facebook。如果用户想要使用用户名密码登录,则必须使用SignUp API或AdminCreateUser API创建新帐户。此外,此帐户无法使用AdminLinkProviderForUser链接到以前的Facebook帐户,因为先决条件是Userpool中不应存在具有相同详细信息(电子邮件等)的Facebook用户。但此时,我们有一个自动创建的Facebook用户,状态为EXTERNAL_PROVIDER。
因此,简而言之,您必须 - 使用SignUp或AdminCreateUser API创建新用户,删除自动创建的Facebook用户&amp;最后如案例1中所述链接Facebook帐户。