AWS managing users via Cognito












3















I have used many services from AWS, some were easy, while some were a bit difficult. After 2 days of searching everywhere, I can say documentation for this service is misleading.



I have simple task to do. I want to change a user attribute in the Cognito pool. And to make things easy, I just need to change an Email, and thats it. Application is an Backoffice (Express/Node), where admins can change user's email.



After reading and reading, I am getting more confused. Apparently, the aws-sdk library, the one I am familiar with, has some Cognito API's that I could use. Getting a working example on how to use them, turned out to be a nightmare.
Then I found out there is a library, but only to be used on the client side. After some tweaks I got it running in Node.js. The tweak was to expose a fetch library in global Node.js namespace.



I was able to add a new user. But for all my intentions, I can't change any of the attributes (like email). The library wants me to provide Username (real user) and a password.
I do have a Username (in this case an email), but I don't have the password.



All I need to do is to connect to the service, and send new attribute for the user and thats it.
This is what I have so far (mainly hacked code samples, from variety of places), and I cant get it to work:



var poolData = {
UserPoolId : 'euXXXXXXX',
ClientId : 'XXXXXXXXXXXX'
};
var userPool = new AmazonCognitoIdentity.CognitoUserPool(poolData);


Ok The above line makes a connection to the existing user pool.



Now if I were to do this:



var attributeList = ;

var dataEmail = {
Name : 'email',
Value : 'email@mydomain.com'
};

var dataPhoneNumber = {
Name : 'phone_number',
Value : '+15555555555'
};

var attributeEmail = new AmazonCognitoIdentity.CognitoUserAttribute(dataEmail);
var attributePhoneNumber = new AmazonCognitoIdentity.CognitoUserAttribute(dataPhoneNumber);

attributeList.push(attributeEmail);
attributeList.push(attributePhoneNumber);

userPool.signUp('username', 'password', attributeList, null, function(err, result){
if (err) {
alert(err.message || JSON.stringify(err));
return;
}
cognitoUser = result.user;
console.log('user name is ' + cognitoUser.getUsername());
});


I can see in AWS console that the user is being added. Great.



Now how to change the attributes of the existing user?
All of examples like this and this
Suggest the following:




Use case 8. Update user attributes for an authenticated user.




var attributeList = ;
var attribute = {
Name : 'nickname',
Value : 'joe'
};
var attribute = new AmazonCognitoIdentity.CognitoUserAttribute(attribute);
attributeList.push(attribute);

cognitoUser.updateAttributes(attributeList, function(err, result) {
if (err) {
alert(err.message || JSON.stringify(err));
return;
}
console.log('call result: ' + result);
});


The problem here is I cant authenticate the user. I can't know user's password, only his email. This is after all a simple Backoffice program, where I just need to change users email.



What can I do in this case?










share|improve this question

























  • You should use the aws-sdk for this. adminUpdateUserAttributes

    – robbannn
    Nov 16 '18 at 10:24













  • I am getting AWS.CognitoIdentityServiceProvider.adminUpdateUserAttributes is not a function... do you have any idea?

    – Vedran Maricevic.
    Nov 16 '18 at 10:43











  • I got it working :). Would you please make an answer and post it?

    – Vedran Maricevic.
    Nov 16 '18 at 10:46
















3















I have used many services from AWS, some were easy, while some were a bit difficult. After 2 days of searching everywhere, I can say documentation for this service is misleading.



I have simple task to do. I want to change a user attribute in the Cognito pool. And to make things easy, I just need to change an Email, and thats it. Application is an Backoffice (Express/Node), where admins can change user's email.



After reading and reading, I am getting more confused. Apparently, the aws-sdk library, the one I am familiar with, has some Cognito API's that I could use. Getting a working example on how to use them, turned out to be a nightmare.
Then I found out there is a library, but only to be used on the client side. After some tweaks I got it running in Node.js. The tweak was to expose a fetch library in global Node.js namespace.



I was able to add a new user. But for all my intentions, I can't change any of the attributes (like email). The library wants me to provide Username (real user) and a password.
I do have a Username (in this case an email), but I don't have the password.



All I need to do is to connect to the service, and send new attribute for the user and thats it.
This is what I have so far (mainly hacked code samples, from variety of places), and I cant get it to work:



var poolData = {
UserPoolId : 'euXXXXXXX',
ClientId : 'XXXXXXXXXXXX'
};
var userPool = new AmazonCognitoIdentity.CognitoUserPool(poolData);


Ok The above line makes a connection to the existing user pool.



Now if I were to do this:



var attributeList = ;

var dataEmail = {
Name : 'email',
Value : 'email@mydomain.com'
};

var dataPhoneNumber = {
Name : 'phone_number',
Value : '+15555555555'
};

var attributeEmail = new AmazonCognitoIdentity.CognitoUserAttribute(dataEmail);
var attributePhoneNumber = new AmazonCognitoIdentity.CognitoUserAttribute(dataPhoneNumber);

attributeList.push(attributeEmail);
attributeList.push(attributePhoneNumber);

userPool.signUp('username', 'password', attributeList, null, function(err, result){
if (err) {
alert(err.message || JSON.stringify(err));
return;
}
cognitoUser = result.user;
console.log('user name is ' + cognitoUser.getUsername());
});


I can see in AWS console that the user is being added. Great.



Now how to change the attributes of the existing user?
All of examples like this and this
Suggest the following:




Use case 8. Update user attributes for an authenticated user.




var attributeList = ;
var attribute = {
Name : 'nickname',
Value : 'joe'
};
var attribute = new AmazonCognitoIdentity.CognitoUserAttribute(attribute);
attributeList.push(attribute);

cognitoUser.updateAttributes(attributeList, function(err, result) {
if (err) {
alert(err.message || JSON.stringify(err));
return;
}
console.log('call result: ' + result);
});


The problem here is I cant authenticate the user. I can't know user's password, only his email. This is after all a simple Backoffice program, where I just need to change users email.



What can I do in this case?










share|improve this question

























  • You should use the aws-sdk for this. adminUpdateUserAttributes

    – robbannn
    Nov 16 '18 at 10:24













  • I am getting AWS.CognitoIdentityServiceProvider.adminUpdateUserAttributes is not a function... do you have any idea?

    – Vedran Maricevic.
    Nov 16 '18 at 10:43











  • I got it working :). Would you please make an answer and post it?

    – Vedran Maricevic.
    Nov 16 '18 at 10:46














3












3








3








I have used many services from AWS, some were easy, while some were a bit difficult. After 2 days of searching everywhere, I can say documentation for this service is misleading.



I have simple task to do. I want to change a user attribute in the Cognito pool. And to make things easy, I just need to change an Email, and thats it. Application is an Backoffice (Express/Node), where admins can change user's email.



After reading and reading, I am getting more confused. Apparently, the aws-sdk library, the one I am familiar with, has some Cognito API's that I could use. Getting a working example on how to use them, turned out to be a nightmare.
Then I found out there is a library, but only to be used on the client side. After some tweaks I got it running in Node.js. The tweak was to expose a fetch library in global Node.js namespace.



I was able to add a new user. But for all my intentions, I can't change any of the attributes (like email). The library wants me to provide Username (real user) and a password.
I do have a Username (in this case an email), but I don't have the password.



All I need to do is to connect to the service, and send new attribute for the user and thats it.
This is what I have so far (mainly hacked code samples, from variety of places), and I cant get it to work:



var poolData = {
UserPoolId : 'euXXXXXXX',
ClientId : 'XXXXXXXXXXXX'
};
var userPool = new AmazonCognitoIdentity.CognitoUserPool(poolData);


Ok The above line makes a connection to the existing user pool.



Now if I were to do this:



var attributeList = ;

var dataEmail = {
Name : 'email',
Value : 'email@mydomain.com'
};

var dataPhoneNumber = {
Name : 'phone_number',
Value : '+15555555555'
};

var attributeEmail = new AmazonCognitoIdentity.CognitoUserAttribute(dataEmail);
var attributePhoneNumber = new AmazonCognitoIdentity.CognitoUserAttribute(dataPhoneNumber);

attributeList.push(attributeEmail);
attributeList.push(attributePhoneNumber);

userPool.signUp('username', 'password', attributeList, null, function(err, result){
if (err) {
alert(err.message || JSON.stringify(err));
return;
}
cognitoUser = result.user;
console.log('user name is ' + cognitoUser.getUsername());
});


I can see in AWS console that the user is being added. Great.



Now how to change the attributes of the existing user?
All of examples like this and this
Suggest the following:




Use case 8. Update user attributes for an authenticated user.




var attributeList = ;
var attribute = {
Name : 'nickname',
Value : 'joe'
};
var attribute = new AmazonCognitoIdentity.CognitoUserAttribute(attribute);
attributeList.push(attribute);

cognitoUser.updateAttributes(attributeList, function(err, result) {
if (err) {
alert(err.message || JSON.stringify(err));
return;
}
console.log('call result: ' + result);
});


The problem here is I cant authenticate the user. I can't know user's password, only his email. This is after all a simple Backoffice program, where I just need to change users email.



What can I do in this case?










share|improve this question
















I have used many services from AWS, some were easy, while some were a bit difficult. After 2 days of searching everywhere, I can say documentation for this service is misleading.



I have simple task to do. I want to change a user attribute in the Cognito pool. And to make things easy, I just need to change an Email, and thats it. Application is an Backoffice (Express/Node), where admins can change user's email.



After reading and reading, I am getting more confused. Apparently, the aws-sdk library, the one I am familiar with, has some Cognito API's that I could use. Getting a working example on how to use them, turned out to be a nightmare.
Then I found out there is a library, but only to be used on the client side. After some tweaks I got it running in Node.js. The tweak was to expose a fetch library in global Node.js namespace.



I was able to add a new user. But for all my intentions, I can't change any of the attributes (like email). The library wants me to provide Username (real user) and a password.
I do have a Username (in this case an email), but I don't have the password.



All I need to do is to connect to the service, and send new attribute for the user and thats it.
This is what I have so far (mainly hacked code samples, from variety of places), and I cant get it to work:



var poolData = {
UserPoolId : 'euXXXXXXX',
ClientId : 'XXXXXXXXXXXX'
};
var userPool = new AmazonCognitoIdentity.CognitoUserPool(poolData);


Ok The above line makes a connection to the existing user pool.



Now if I were to do this:



var attributeList = ;

var dataEmail = {
Name : 'email',
Value : 'email@mydomain.com'
};

var dataPhoneNumber = {
Name : 'phone_number',
Value : '+15555555555'
};

var attributeEmail = new AmazonCognitoIdentity.CognitoUserAttribute(dataEmail);
var attributePhoneNumber = new AmazonCognitoIdentity.CognitoUserAttribute(dataPhoneNumber);

attributeList.push(attributeEmail);
attributeList.push(attributePhoneNumber);

userPool.signUp('username', 'password', attributeList, null, function(err, result){
if (err) {
alert(err.message || JSON.stringify(err));
return;
}
cognitoUser = result.user;
console.log('user name is ' + cognitoUser.getUsername());
});


I can see in AWS console that the user is being added. Great.



Now how to change the attributes of the existing user?
All of examples like this and this
Suggest the following:




Use case 8. Update user attributes for an authenticated user.




var attributeList = ;
var attribute = {
Name : 'nickname',
Value : 'joe'
};
var attribute = new AmazonCognitoIdentity.CognitoUserAttribute(attribute);
attributeList.push(attribute);

cognitoUser.updateAttributes(attributeList, function(err, result) {
if (err) {
alert(err.message || JSON.stringify(err));
return;
}
console.log('call result: ' + result);
});


The problem here is I cant authenticate the user. I can't know user's password, only his email. This is after all a simple Backoffice program, where I just need to change users email.



What can I do in this case?







javascript node.js amazon-web-services aws-sdk amazon-cognito






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 16 '18 at 11:19









robbannn

3,54012137




3,54012137










asked Nov 16 '18 at 10:14









Vedran Maricevic.Vedran Maricevic.

2,45643461




2,45643461













  • You should use the aws-sdk for this. adminUpdateUserAttributes

    – robbannn
    Nov 16 '18 at 10:24













  • I am getting AWS.CognitoIdentityServiceProvider.adminUpdateUserAttributes is not a function... do you have any idea?

    – Vedran Maricevic.
    Nov 16 '18 at 10:43











  • I got it working :). Would you please make an answer and post it?

    – Vedran Maricevic.
    Nov 16 '18 at 10:46



















  • You should use the aws-sdk for this. adminUpdateUserAttributes

    – robbannn
    Nov 16 '18 at 10:24













  • I am getting AWS.CognitoIdentityServiceProvider.adminUpdateUserAttributes is not a function... do you have any idea?

    – Vedran Maricevic.
    Nov 16 '18 at 10:43











  • I got it working :). Would you please make an answer and post it?

    – Vedran Maricevic.
    Nov 16 '18 at 10:46

















You should use the aws-sdk for this. adminUpdateUserAttributes

– robbannn
Nov 16 '18 at 10:24







You should use the aws-sdk for this. adminUpdateUserAttributes

– robbannn
Nov 16 '18 at 10:24















I am getting AWS.CognitoIdentityServiceProvider.adminUpdateUserAttributes is not a function... do you have any idea?

– Vedran Maricevic.
Nov 16 '18 at 10:43





I am getting AWS.CognitoIdentityServiceProvider.adminUpdateUserAttributes is not a function... do you have any idea?

– Vedran Maricevic.
Nov 16 '18 at 10:43













I got it working :). Would you please make an answer and post it?

– Vedran Maricevic.
Nov 16 '18 at 10:46





I got it working :). Would you please make an answer and post it?

– Vedran Maricevic.
Nov 16 '18 at 10:46












1 Answer
1






active

oldest

votes


















2














To update the attributes of a Cognito User Pool-user as an admin, you should use adminUpdateUserAttributes function from the aws-sdk class CognitoIdentityServiceProvider.



let AWS = require('aws-sdk');
let cognitoISP = new AWS.CognitoIdentityServiceProvider({ region: 'your-region-here' });

function updateUserAttribute(name, value, username, userPoolId){
return new Promise((resolve, reject) => {
let params = {
UserAttributes: [
{
Name: name, // name of attribute
Value: value // the new attribute value
}
],
UserPoolId: userPoolId,
Username: username
};

cognitoISP.adminUpdateUserAttributes(params, (err, data) => err ? reject(err) : resolve(data));
});
}





share|improve this answer
























    Your Answer






    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "1"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53335683%2faws-managing-users-via-cognito%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    2














    To update the attributes of a Cognito User Pool-user as an admin, you should use adminUpdateUserAttributes function from the aws-sdk class CognitoIdentityServiceProvider.



    let AWS = require('aws-sdk');
    let cognitoISP = new AWS.CognitoIdentityServiceProvider({ region: 'your-region-here' });

    function updateUserAttribute(name, value, username, userPoolId){
    return new Promise((resolve, reject) => {
    let params = {
    UserAttributes: [
    {
    Name: name, // name of attribute
    Value: value // the new attribute value
    }
    ],
    UserPoolId: userPoolId,
    Username: username
    };

    cognitoISP.adminUpdateUserAttributes(params, (err, data) => err ? reject(err) : resolve(data));
    });
    }





    share|improve this answer




























      2














      To update the attributes of a Cognito User Pool-user as an admin, you should use adminUpdateUserAttributes function from the aws-sdk class CognitoIdentityServiceProvider.



      let AWS = require('aws-sdk');
      let cognitoISP = new AWS.CognitoIdentityServiceProvider({ region: 'your-region-here' });

      function updateUserAttribute(name, value, username, userPoolId){
      return new Promise((resolve, reject) => {
      let params = {
      UserAttributes: [
      {
      Name: name, // name of attribute
      Value: value // the new attribute value
      }
      ],
      UserPoolId: userPoolId,
      Username: username
      };

      cognitoISP.adminUpdateUserAttributes(params, (err, data) => err ? reject(err) : resolve(data));
      });
      }





      share|improve this answer


























        2












        2








        2







        To update the attributes of a Cognito User Pool-user as an admin, you should use adminUpdateUserAttributes function from the aws-sdk class CognitoIdentityServiceProvider.



        let AWS = require('aws-sdk');
        let cognitoISP = new AWS.CognitoIdentityServiceProvider({ region: 'your-region-here' });

        function updateUserAttribute(name, value, username, userPoolId){
        return new Promise((resolve, reject) => {
        let params = {
        UserAttributes: [
        {
        Name: name, // name of attribute
        Value: value // the new attribute value
        }
        ],
        UserPoolId: userPoolId,
        Username: username
        };

        cognitoISP.adminUpdateUserAttributes(params, (err, data) => err ? reject(err) : resolve(data));
        });
        }





        share|improve this answer













        To update the attributes of a Cognito User Pool-user as an admin, you should use adminUpdateUserAttributes function from the aws-sdk class CognitoIdentityServiceProvider.



        let AWS = require('aws-sdk');
        let cognitoISP = new AWS.CognitoIdentityServiceProvider({ region: 'your-region-here' });

        function updateUserAttribute(name, value, username, userPoolId){
        return new Promise((resolve, reject) => {
        let params = {
        UserAttributes: [
        {
        Name: name, // name of attribute
        Value: value // the new attribute value
        }
        ],
        UserPoolId: userPoolId,
        Username: username
        };

        cognitoISP.adminUpdateUserAttributes(params, (err, data) => err ? reject(err) : resolve(data));
        });
        }






        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 16 '18 at 11:02









        robbannnrobbannn

        3,54012137




        3,54012137
































            draft saved

            draft discarded




















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53335683%2faws-managing-users-via-cognito%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            Xamarin.iOS Cant Deploy on Iphone

            Glorious Revolution

            Dulmage-Mendelsohn matrix decomposition in Python