В локальном хранилище отсутствует идентификационный токен, пожалуйста, аутентифицируйтесь

#javascript #amazon-web-services #amazon-dynamodb #amazon-cognito

#javascript #amazon-веб-сервисы #amazon-dynamodb #amazon-cognito

Вопрос:

При получении локального хранилища отсутствует идентификационный токен, пожалуйста, аутентифицируйтесь. Моя конечная цель — зарегистрировать пользователя через AWS Cognito, а затем добавить строку в мою таблицу DynamoDB. Я могу включить пользователя в пул пользователей, но не могу добавить детали в DynamoDB. Не удалось выяснить ошибку, любая помощь будет оценена.

 <!DOCTYPE html>

<html lang="en">
  <head>
    <meta charset="utf-8">
    <!-- Javascript SDK-->
 <script src="https://sdk.amazonaws.com/js/aws-sdk-2.410.0.min.js"></script> 
    <script src="https://rawgit.com/aws/amazon-cognito-identity-js/master/dist/aws-cognito-sdk.min.js"></script>
<script src="https://rawgit.com/aws/amazon-cognito-identity-js/master/dist/amazon-cognito-identity.min.js"></script>
 
  </head>

    
  <body>
<fieldset >
    <h1 class="h3 mb-3 font-weight-normal" id="titleheader">Register an Account</h1>
    <form>
    <input type="email" class="form-control" id="emailInputRegister" placeholder="Email" pattern=".*" required><br><br>
    <input type="password" class="form-control" id="passwordInputRegister" placeholder="Password" pattern=".*" required><br><br>
    <input type="personalname" class="form-control" id="personalnameRegister" placeholder="First Name" pattern=".*" required><br><br>
    <input type="personalname2" class="form-control" id="personalnameRegister2" placeholder="Last Name" pattern=".*" required><br><br>
    <input type="text" class="form-control" id="organizationRegister" placeholder="Organization" pattern=".*" required><br><br>
    <input type="text" class="form-control" id="jobTitleRegister" placeholder="JobTitle" pattern=".*" required><br><br>
    <input type="tel" class="form-control" id="phone" placeholder="Cell Phone Number" pattern=".*" required><br><br>
    <button id="mainbutton" class="btn btn-lg btn-primary btn-block" type="button" onclick="registerButton()" >Sign Up</button>
    </form>
</fieldset >    
    <script>

        var username;
        var password;
        var firstname;
        var lastname;
        var jobtitle;
        var organization;
        var phonenumber;
        var poolData;
            
      function registerButton() {
            
        username = document.getElementById("emailInputRegister").value;
        password = document.getElementById("passwordInputRegister").value;  
        firstname = document.getElementById("personalnameRegister").value;
        lastname = document.getElementById("personalnameRegister2").value;
        organization = document.getElementById("organizationRegister").value;
        jobtitle = document.getElementById("jobTitleRegister").value;
        phonenumber = document.getElementById("phone").value;
      
        poolData = {
                
                UserPoolId :<userPoolId>,
                '
                ClientId : <client id>
            };
      
            var userPool = new AmazonCognitoIdentity.CognitoUserPool(poolData);
        
        var attributeList = [];
        
        var dataEmail = {
            Name : 'email', 
            Value : username, //get from form field
        };
        
        var dataFirstName = {
            Name : 'name', 
            Value : firstname, //get from form field
        };
        
        /*var dataLastName ={
        Name : 'family name', 
        Value : lastname,
        };
        
        var dataPhoneNumber ={
        Name : 'family name', 
        Value : lastname,
        };*/
        
        var attributeEmail = new AmazonCognitoIdentity.CognitoUserAttribute(dataEmail);
        var attributePersonalName = new AmazonCognitoIdentity.CognitoUserAttribute(dataFirstName); 
        
        
        attributeList.push(attributeEmail);
        attributeList.push(attributePersonalName);
        
        var temp;
            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());
            //var cognitoUser = userPool.getCurrentUser();
            //console.log('cognitoUser =',cognitoUser);
            //change elements of page
            //document.getElementById("titleheader").innerHTML = "Check your email for a verification link";
            
        //});
        //var userPool1 = new AWSCognito.CognitoIdentityServiceProvider.CognitoUserPool(data);
        //console.log('userPool',userPool1);
        
        //var cognitoUser = userPool1.getCurrentUser();
        //console.log("temp is ", cognitoUser);
          if (cognitoUser != null) {
            cognitoUser.getSession(function(err, session) {
              if (err) {
                console.log(err);
                return;
              }

              console.log('session validity: '   session.isValid());
              console.log('session token: '   session.getIdToken().getJwtToken());

              AWS.config.region = 'us-east-1';
              AWS.config.credentials = new AWS.CognitoIdentityCredentials({
                IdentityPoolId : <Identity_Pool>, 
                Logins : {
                  // Change the key below according to the specific region your user pool is in.
                  'cognito-idp.us-east-1.amazonaws.com/${Identity_Pool}' : session.getIdToken().getJwtToken()
                }
              });

              AWS.config.credentials.get(function(err) {
                if (!err) {
                  var id = AWS.config.credentials.identityId;
                  console.log('Cognito Identity ID '  id);

                  // Instantiate aws sdk service objects now that the credentials have been updated
                  var docClient = new AWS.DynamoDB.DocumentClient({ region: AWS.config.region });
                  var params = {
                    TableName: 'TestTable',
                    Item:{emailId:username, }
                  };
                  docClient.put(params, function(err, data) {
                    if (err) 
                      console.error(err);
                    else 
                      console.log(data);
                  });
                }
              });
            });
          } else {
            console.log(err);
            return;
          }
        });
        
    }


      
    </script>       
 </body>
  
</html>
  

Ответ №1:

Вы можете использовать API для операций Dynamodb с docClient.put()

Комментарии:

1. Я уже включил это в свой код, но, похоже, это не работает. Большое спасибо за ваши данные.