AngularJS上的AWS Cognito登录错误

时间:2017-05-05 16:07:45

标签: javascript angularjs amazon-web-services amazon-cognito aws-cognito

我正在使用cognito Amazon Webservice进行用户管理。

我已经管理了对我的userPool的签名,但每次我尝试登录我的用户池我都知道这个控制台错误:

Error: this.pool.getUserPoolId is not a function

我不知道getUserPoolId ...

的位置 编辑:我在我的代码中找到了我的登录功能:

login: function(username, password) {
        var authenticationData = {
                Username : username,
                Password : password
        };
        var userData = {
                Username :username,
                Pool : poolData
        };
        var authenticationDetails = new AWSCognito.CognitoIdentityServiceProvider.AuthenticationDetails(authenticationData);

        var cognitoUser = new AWSCognito.CognitoIdentityServiceProvider.CognitoUser(userData);
        cognitoUser.authenticateUser(authenticationDetails, {
        onSuccess: function (result) {
            console.log('access token + ' + result.getAccessToken().getJwtToken());
            /*Use the idToken for Logins Map when Federating User Pools with Cognito Identity or when passing through an Authorization Header to an API Gateway Authorizer*/
            console.log('idToken + ' + result.idToken.jwtToken);
    },

    onFailure: function(err) {
            alert(err);
    },

        });
        }

有谁知道该怎么做?

2 个答案:

答案 0 :(得分:0)

AWS Cognito JavaScript SDK初始化模式要求您将“数据对象”传递给AWS SDK构造函数。作为回报,SDK会为您提供带有各种连接方法的AWS“界面”。

我认为您在代码中使用的是data object而不是后续的interface

示例:

// Data Object used for initialization of the interface
const userPoolData = {
    UserPoolId: identityPoolId,
    ClientId: clientId
}

// The `userPoolInterface`, constructed from your `poolData` object
const userPoolInterface = new AWSCognito
    .CognitoIdentityServiceProvider
    .CognitoUserPool(userPoolData)

在您提供的代码中,您似乎正在传递userData对象(用于初始化),您应该在其中传递应该先前已初始化的userPool接口。

请改为尝试:

login: function(username, password) {

    // 1) Create the poolData object
    var poolData = {
        UserPoolId: identityPoolId,
        ClientId: clientId
    };

    // 2) Initialize the userPool interface
    var userPool = new AWSCognito
        .CognitoIdentityServiceProvider
        .CognitoUserPool(poolData)

    // 3) Be sure to use `userPool`, not `poolData`
    var userData = {
        Username : username,
        Pool : poolData,  // <-- Data?! Oops..
        Pool : userPool  // "interface", that's better :)
    };

    var authenticationData = {
        Username : username,
        Password : password
    };

    var cognitoUser = new AWSCognito
        .CognitoIdentityServiceProvider
        .CognitoUser(userData)

    var authenticationDetails = new AWSCognito
        .CognitoIdentityServiceProvider
        .AuthenticationDetails(authenticationData);

    cognitoUser.authenticateUser( ...etc... );
}

在线试用:

如果有帮助,我会做笔记并做示例,同时我将介绍AWS Cognito SDK示例。欢迎您查看我正在使用的Github回购。如果您可以测试一个有效的例子,它可能会有所帮助。

Github Repository  / Live Demo

答案 1 :(得分:-1)

我假设你正在初始化你的poolData对象:

var poolData = {
    UserPoolId : '...', // Your user pool id here
    ClientId : '...' // Your client id here
};