池设置期间是否配置了使用的 Cognito MFA 类型?

Is the type of Cognito MFA used configured during Pool setup?

Cognito Javascript SDK 示例片段包含以下标记:

cognitoUser.enableMFA(function(err, result) {
    if (err) {
        alert(err);
        return;
    }
    console.log('call result: ' + result);
});

Cognito 是否区分使用 TOTP 或短信的 MFA?例如,上面的代码片段不允许我们 select 我们想要什么类型的 MFA,那是在池配置期间设置的东西吗?

一直滚动到示例文档的底部会显示以下代码示例:

totpMfaSettings = {
    PreferredMfa : true,
    Enabled : true
};
cognitoUser.setUserMfaPreference(null, totpMfaSettings, function(err, result) {
    if (err) {
        alert(err);
    }
    console.log('call result ' + result)
});

PreferredMFA 参数似乎是一种奇怪的指定首选 TOTP 的方法。那么我们会默认为 SMS MFA 设置用户,然后使用如上所示的 API 调用将他们切换到 TOTP 吗?另外,我们如何传递初始 TOTP QRCode / 种子以及用户使用哪个 TOTP 应用程序?

在我看来,AWS Cognito 文档和 API 非常混乱,这里 "enableMFA" "disableMFA" 仅表示 SMS MFA。如果要在 SMS 和 TOTP 之间进行选择,请使用 cognitoUser.setUserMfaPreference。此外,AWS.CognitoIdentityServiceProvider.getUser API 允许您检查 MFA 首选项。