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.
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? –
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
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 ! –