How to get user attributes (username, email, etc.) using cognito identity id

后端 未结 7 784
不思量自难忘°
不思量自难忘° 2020-12-08 06:28

I have AWS Cognito Identity Pool that is configured with Cognito User Pool as an authentication provider.

Assume I have identity ID of an identity in Cognito Identit

相关标签:
7条回答
  • 2020-12-08 07:11

    I faced the similar issue and after too much of scratching i was not able to find the exact way of pulling out the details. My usecase was to get the details in android APP. After looking into their AWSMobile client API code. I found below and it is working from me.

    Log.i(TAG, "User Details"+ AWSMobileClient.getInstance().getUserAttributes().toString());

    Recommendation - Try use AWSMobileclient incase you are using it for Android Development as this is new library that is recommended for development.

    0 讨论(0)
  • 2020-12-08 07:12

    The ID Token that you exchange with Cognito federated identity service to get the identity id and credentials already has all user attributes. You do not need an extra call to any service.

    It is a JWT token and you can use any library on the client to decode the values. You can read this guide for more information about the tokens vended by Cognito user pools.

    Alternatively, you can also use the Access Token to call GetUser API which will return all the user information.

    0 讨论(0)
  • 2020-12-08 07:24

    Just struggled with this for a while, and the way I got the user name, using Java API is:

    identityManager.login(this, new DefaultSignInResultHandler() {
            @Override
            public void onSuccess(Activity activity, IdentityProvider identityProvider) {
                ...               
                String userName = ((CognitoUserPoolsSignInProvider) identityProvider).getCognitoUserPool().getCurrentUser().getUserId();
    
    0 讨论(0)
  • 2020-12-08 07:24

    Use this piece of code

           GetDetailsHandler detailsHandler = new GetDetailsHandler() {
         @Override
         public void onSuccess(CognitoUserDetails cognitoUserDetails) {
            CognitoUserAttributes cognitoUserAttributes=cognitoUserDetails.getAttributes();
            stringStringHashMap=new HashMap<>();
            stringStringHashMap =cognitoUserAttributes.getAttributes();
             userNumber=stringStringHashMap.get("phone_number");
            e1.setText(userNumber);
    
            Log.d("Response"," Inside DEATILS HANDLER");
            // Store details in the AppHandler
            AppHelper.setUserDetails(cognitoUserDetails);
            // Trusted devices?
            handleTrustedDevice();
           // e1.setText(input.getText().toString());
             }
    
             @Override
              public void onFailure(Exception exception) {
            closeWaitDialog();
            showDialogMessage("Could not fetch user details!", AppHelper.formatException(exception), true);
            }
           };
         private void getDetails() {
        AppHelper.getPool().getUser(username).getDetailsInBackground(detailsHandler);
          }  
    
    0 讨论(0)
  • 2020-12-08 07:24
    console.log('username is ' + cognitoUser.getUsername());
    
    0 讨论(0)
  • 2020-12-08 07:27

    Using REST API

    AccessToken

    Thought that this could be very helpful to someone as I've spent a lot of time trying to figure out how to get UserAttributes with only accessToken and region ( Similar to this but with REST API ( Without using aws-sdk )

    You can get UserAttributes with accessToken using this HTTP request. ( GetUser )

    Method: POST
    Endpoint: https://cognito-idp.{REGION}.amazonaws.com/
    Content-Type: application/x-amz-json-1.1
    Content-Length: 1162 // Access Token bytes length
    X-Amz-Target: AWSCognitoIdentityProviderService.GetUser
    Body: {"AccessToken":"ACCESS_TOKEN"}
    

    And if the accessToken is valid, you should receive example response like the following

    {
        "UserAttributes": [
            {
                "Name": "sub",
                "Value": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx"
            },
            {
                "Name": "email_verified",
                "Value": "true"
            },
            {
                "Name": "name",
                "Value": "Jason"
            },
            {
                "Name": "phone_number_verified",
                "Value": "true"
            },
            {
                "Name": "phone_number",
                "Value": "+xxxxxxxxxxx"
            },
            {
                "Name": "email",
                "Value": "xxxx@gmail.com"
            }
        ],
        "Username": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx"
    }
    
    0 讨论(0)
提交回复
热议问题