那里有Cognito用户池专家吗?我已经使用Cognito已有一段时间了,但是这个让我有些困惑。
我们允许用户使用诸如Facebook之类的社交帐户进行注册和登录,这些社交帐户在用户池中设置为身份提供者。
用户需要先填写自定义注册表格,然后才能使用主应用程序-我们不使用托管的UI进行登录或注册
自定义注册过程的一个步骤使用户可以指示要使用的社交服务提供商
这使我们能够从社交服务提供商处撤回用户的电子邮件,姓氏和名字,这非常好-我们目前使用认知客户端和回调来实现
但是,这样做是为了在注册过程完成之前在Userpool中预配一个用户-实际上这很有意义-为了Cognito向我们提供需要调用到社交服务提供商中的用户信息/ userinfo端点以填充用户数据
因此,我们现在遇到的问题是,尽管用户在注册过程中途进行了一半,但我拥有一个已确认的用户帐户-例如。在用户完成注册过程之前
这是一个问题,因为用户可以使用其社交登录名登录应用程序而无需完成注册过程
所以我看到有两个选择:
我缺少明显的东西吗?
谢谢!
答案 0 :(得分:1)
我会说PostConfirmation Lambda触发器是一种好方法-但是请使用 adminDisableProviderForUser 来禁止用户使用指定的外部(SAML或社交)身份提供者登录
您以后可以调用 adminLinkProviderForUser 将用户池中的现有用户帐户链接到外部身份提供商。
另一种解决方案是,如果用户尚未完全完成注册过程,则可以通过预身份验证Lambda触发器检查有关已完成注册过程的唯一标识符来阻止用户登录
答案 1 :(得分:0)
最终,对我们而言最简单的解决方案是Cognito中的预令牌生成触发器,如下所示:
exports.handler = async (event) => {
if(event.triggerSource==="TokenGeneration_HostedAuth") {
//check db/api etc to see if we have a valid registration stored for user
if(!hasCompletedRegistration) {
//throw auth exception which we can catch on the frontend to inform user
throw new Error("REGISTRATION_NOT_COMPLETE")
}
}
return event
};
对于用户名/密码登录,TriggerSource将为 TokenGeneration_Authentication
对于联盟/社交登录,TriggerSource将为 TokenGeneration_HostedAuth