AWS Cognito Identity JS:Forget/Remember/Do 不记得设备

AWS Cognito Identity JS: Forget/Remember/Do Not Remember Device

我正在使用 AWS Cognito Identity JS SDK (https://github.com/aws/amazon-cognito-identity-js),我正在尝试设置一些按钮来测试 setDeviceStatusRememberedsetDeviceStatusNotRememberedforgetDevice 功能,但我不断收到一条错误消息:

MissingRequiredParameter: Missing required key 'DeviceKey' in params

下面是其中一个函数的实现:

forgetDevice = function(){

var cognitoUser = userPool.getCurrentUser();

if (cognitoUser != null) {
    cognitoUser.getSession(function(err, session) {
        if (err) {
            alert(err);
            signOut();
            return;
        }

        console.log('session validity: ' + session.isValid());

        cognitoUser.forgetDevice({
            onSuccess: function (result) {
                console.log('call result: ' + result);
            },
            onFailure: function(err) {
                alert(err);
            }
        });
    });
  } 
}

如果我这样修改函数:

forgetDevice = function(cognitoUser){
    cognitoUser.forgetDevice({
        onSuccess: function (result) {
            console.log('call result: ' + result);
        },
        onFailure: function(err) {
            alert(err);
        }
    });
}

我从 cognitoUser.authenticateUser success 回调函数调用该函数,将 cognitoUser 作为参数传递给 forgetDevice 函数,一切正常。

从第一个实现中的 session 对象看来 session 对象不包含 DeviceKey 属性 所以 cognitoUser.forgetDevice()调用失败。

我想弄清楚的是,我应该只在登录时调用 setDeviceStatusRememberedsetDeviceStatusNotRememberedforgetDevice 函数,还是应该能够调用他们在我的应用程序中的任何时间?希望这是有道理的。任何帮助将不胜感激。谢谢!

这有帮助吗:

请注意,如果为用户池启用了设备跟踪且设置需要用户选择加入,则您需要实施 onSuccess(result, userConfirmationNecessary) 回调、收集用户输入并调用 setDeviceStatusRemembered 以记住device 或 setDeviceStatusNotRemembered 不记住设备。

http://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-device-tracking.html

您还可以尝试调用 getCachedDeviceKeyAndPassword 来填充 CognitoUser 对象中的 deviceKey 吗?