我正在尝试将用于用户身份验证的 MFA 添加到现有解决方案(内置 Angular)中,以便在 AWS Cognito 中进行设备管理。
从用户体验的角度来看,我很难弄清楚如何很好地处理这个特定的响应。它实际上感觉很破碎,所以如果其他人在这里遇到痛点,我会很高兴。
请参阅用例 23。例如实现,我的如下:
authenticate(username: string, password: string): Observable<any> {
// init cognitoUser here
return new Observable((observer) => {
cognitoUser.authenticateUser(authenticationDetails, {
onSuccess: (result: any) => {},
onFailure: (err: Error) => {},
mfaRequired: (codeDeliveryDetails: any) => {
// SMS has just been sent automatically
// and it needs to be confirmed within this scope
// The example linked requests the code via `confirm()`
// which is awful UX...and since this is a service
// probably non-compliant with best practice
// However, without this `confirm` at this point in
// time, we have no confirmationCode below
cognitoUser.sendMFACode(confirmationCode, {
onSuccess: (result) => {
observer.next(result);
observer.complete();
}, onFailure: (err: Error) => {
observer.error(err);
observer.complete();
}
});
}
});
});
}
预期的:
- 如果用户验证成功但没有通过 MFA 添加此设备,我们可以管理重定向到适当的确认码表单页面并
sendMFACode
手动触发该功能(可能通过某种受限会话?)
问题:
- 我们没有会话,所以我们无法向用户询问在此登录屏幕之外自动发送的 MFA 代码……第 22 条?
- 在登录表单中添加另一个显示/隐藏字段不起作用,因为它会
sendMfaCode
多次点击该功能,导致发送多个 SMS 代码。
有没有人幸运地走出了这个流程?