2017-10-20 20 views
0

Je suis totalement nouveau à aws cognito sdk. J'essaie d'inscrire un utilisateur en utilisant cognito sdk dans Node.js. Chaque fois que je tente d'exécuter le code Node.js, il me renvoie une erreur en disantInvalidParameterType: Params.UserAttributes attendu Nom à être une chaîne AWS Cognito SDK

{ MultipleValidationErrors: There were 5 validation errors: 
* InvalidParameterType: Expected params.UserAttributes[0].Name to be a string 
* InvalidParameterType: Expected params.UserAttributes[1].Name to be a string 
* InvalidParameterType: Expected params.UserAttributes[2].Name to be a string 
* InvalidParameterType: Expected params.UserAttributes[3].Name to be a string 
* InvalidParameterType: Expected params.UserAttributes[4].Name to be a string 

Voici mon code.

index.js

var AWSCognito = require('aws-sdk'); 
var AmazonCognitoIdentity = require('amazon-cognito-identity-js'); 
var CognitoSDK = require('amazon-cognito-identity-js-node'); 

AWSCognito.CognitoIdentityServiceProvider.CognitoUserPool = CognitoSDK.CognitoUserPool; 
AWSCognito.CognitoIdentityServiceProvider.CognitoUser = CognitoSDK.CognitoUser; 
AWSCognito.CognitoIdentityServiceProvider.CognitoUserAttribute = CognitoSDK.CognitoUserAttribute; 
AWSCognito.config.region = 'us-west-2'; 
var poolData = { 
    UserPoolId : '...', // your user pool id here 
    ClientId : '....' // your app client id here 
}; 
var userPool = 
    new AmazonCognitoIdentity.CognitoUserPool(poolData); 
var userData = { 
    Username : 'jayanthv', // your username here 
    Pool : userPool 
};  
//---------------Signing up Users for Your App--------------------- 
var attributeList = [];  
var dataEmail = { 
    Name : JSON.stringify("email"), 
    Value : '[email protected]' // your email here 
}; 
var dataPhoneNumber = { 
    Name : 'phone_number', 
    Value : '8326623393' // your phone number here with +country code and no delimiters in front 
}; 
var dataName = { 
    Name : 'name', 
    Value : 'Jayanth' // your phone number here with +country code and no delimiters in front 
}; 
var dataProfile = { 
    Name : 'profile', 
    Value : 'SamplePortal' // your phone number here with +country code and no delimiters in front 
}; 
var dataGender = { 
    Name : 'gender', 
    Value : 'Male' // your phone number here with +country code and no delimiters in front 
}; 
var attributeEmail = 
    new AWSCognito.CognitoIdentityServiceProvider.CognitoUserAttribute(dataEmail); 
var attributePhoneNumber = 
    new AWSCognito.CognitoIdentityServiceProvider.CognitoUserAttribute(dataPhoneNumber); 
var attributeName = 
    new AWSCognito.CognitoIdentityServiceProvider.CognitoUserAttribute(dataName); 
var attributeProfile = 
    new AWSCognito.CognitoIdentityServiceProvider.CognitoUserAttribute(dataProfile); 
var attributeGender = 
    new AWSCognito.CognitoIdentityServiceProvider.CognitoUserAttribute(dataGender); 
attributeList.push(attributeEmail); 
attributeList.push(attributePhoneNumber); 
attributeList.push(attributeName); 
attributeList.push(attributeProfile); 
attributeList.push(attributeGender); 

var cognitoUser; 
userPool.signUp('jayanthv', '[email protected]', attributeList, null, function(err, result){ 
    if (err) { 
     console.log(err); 
     return; 
    } 
    cognitoUser = result.user; 
    console.log('user name is ' + cognitoUser.getUsername()); 
}); 

Je n'ai pas vraiment aucune idée pourquoi cela se produit. J'ai beaucoup cherché dans les forums aws et les débordements de pile. Je serais heureux si quelqu'un peut m'aider à résoudre ce problème.

--- CODE MISE À JOUR ---

la documentation ci-dessous Suivi qui explique en détail comment utiliser les appels API.

http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CognitoIdentityServiceProvider.html

Voici mon code mis à jour. index.js

var AWSCognito = require('aws-sdk'); 

AWSCognito.config.region = 'us-west-2'; 

exports.handler = (event, context, callback) => { 

    var params = { 
     ClientId: event.ClientId, /* required */ 
     Password: event.Password, /* required */ 
     Username: event.Username, /* required */ 

     UserAttributes: [ 
      { 
       Name: 'email', /* required */ 
       Value: event.email 
      }, 
      { 
       Name: 'gender', 
       Value: event.gender 
      }, 
      { 
       Name: 'name', 
       Value: event.name 
      }, 
      { 
       Name: 'phone_number', 
       Value: event.phone_number 
      }, 
      { 
       Name: 'profile', 
       Value: event.profile 
      } 
      /* more attributes if needed */ 
     ] 
    }; 

    var userPool = new AWSCognito.CognitoIdentityServiceProvider(); 
    var responseData = null; 
    userPool.signUp(params, function(err, data) { 
     if (err) console.log(err, err.stack); // an error occurred 
     else { 
      console.log(data); 
      responseData = data; 
     } 
         // successful response 
    }); 


    console.log(responseData); 
    callback(responseData, null); 
}; 

Le code ci-dessus est écrit et testé dans une fonction Lambda.

Répondre

0

Voici comment cela a fonctionné pour nous,

//Required parameters in event: 

var event = {};                                                                                      
event.params = {                                               
    ClientId: 'clientid', /* required */                                     
    Password: 'password', /* required */                                        
    Username: 'username', /* required */                                    

    UserAttributes: [                                              
     {                                                 
      Name: 'email', /* required */                                         
      Value: 'emailaddress'                                       
     },                                                 
     {                                                 
      Name: 'family_name',                                           
      Value: 'familyname'                                           
     },                                                 
     {                                                 
      Name: 'given_name',                                           
      Value: 'givenname'                                           
     },                                                 
     {                                                 
      Name: 'phone_number',                                           
      Value: '+19999999999'                                           
     }                                                 
     /* more attributed if needed */                                             
    ]                                                  
}; 

// événement ci-dessus est pour référence

exports.Execute = function(event, callback) {                                         
    var params = event.params;                                                                                            
    cognitoidentityserviceprovider.signUp(params, function(err, data) {                                 
     if (err) {                                               
      callback(null, err);                                            
     } else {                                                
      callback(null, data);                                            
     }                                                  
    }); 

je devais enlever une partie de l'application du code spécifique, qui n'est pas lié ici.

Espérons que ça aide.

+0

Merci pour la réponse. Puis-je savoir comment utiliser la méthode CognitoIdentityProvider.signUp avec une variable d'événement déclarée en tant qu'objet javascript simple? –

+0

Nous affectons à l'événement après l'avoir reçu. Une chose de plus a oublié de nettoyer. Je vais le garder à jour. – Kannaiyan

+0

Merci pour votre aide. Cela m'a aidé à résoudre partiellement le problème. En passant par la documentation a résolu le problème. BTW, j'ai mis à jour mon code ci-dessus avec les changements. Merci ! –