问题描述
我正在设置一个身份验证,其中 MFA 不是可选的,这意味着从注册后的第一次登录尝试开始,用户将被要求设置 MFA(在这种情况下,我将使用基于时间的一次性密码,或TOPT)。为此,我可以看到以下步骤是合理的:
1)通过登录表单获取用户信息 - Auth.signUp()
2) 根据步骤 1) 中检索到的用户数据确定是否已经为用户设置了基于 TOPT 的 MFA。如果不是,请转到第 3) 步,否则转到第 4) 步
3)如果未设置 TOPT,则重定向到将生成 QRCode 的表单以设置此 MFA 功能。验证代码后,登录用户。
4)如果设置了TOPT,则要求输入密码。验证后,登录用户。
我的困境:似乎我无法获取步骤 2) 中的信息,即是否已经为用户设置了基于 TOPT 的 MFA,而用户尚未经过身份验证。在第 1 步中通过 challengeName
在有效负载中检索到的标志 Auth.signUp()
仅提供有关是否启用 MFA 的信息('MFA_SETUP'
),而不提供基于 TOTP 的 MFA 是否已设置的信息已经起来了为此,方法 Auth.getPreferredMFA()
可以发挥作用,但它仅在传递给它的用户对象代表经过身份验证(或已登录)的用户时才有效。有没有办法确定是否为尝试登录(但尚未登录)的用户设置了 TOTP MFA?
此外,欢迎使用任何其他解决方案来解决此问题。肯定有人遇到过和我一样的情况,从第一次登录开始就强制执行 MFA。
解决方法
我面临同样的问题。如果需要 MFA,我会打开一个模式来显示二维码并为用户设置 mfa。
代码:“NotAuthorizedException” 消息:“用户会话无效。” 名称:“NotAuthorizedException”
但由于用户尚未登录并创建任何访问令牌而收到此错误。
我解决这个问题的想法实际上是让用户登录,但让他们的权限不超过 SetupMFA 屏幕,这样他们只有在完成设置后才能获得一些权限。
你自己有进步吗?我想听听任何解决方案。