2015-09-18 99 views
1

我试图将终端作为我的网站(http://website.com/),并在成功订阅后发布到SNS主题。AWS SNS Invalid Token

无论我尝试什么,我都会得到相同的无效令牌错误。有人可以帮我吗? (消毒代码)

endPointTest() 
    .then((result) => { 
    console.log("Result", result); 

    AWS.config.update({ 
     accessKeyId:'accessKeyIdvalue', 
     secretAccessKey:'secretAccessKeyvalue', 
     region: 'us-west-2' 
    }); 
    var sns = new AWS.SNS(); 
    console.log("SNS OBj", sns); 
    var params2 = { 
     Protocol: 'http', /* required */ 
     TopicArn: 'topic_ARN_from_console', /* required */ 
     Endpoint: 'http://website.com/' 
    }; 
    sns.subscribe(params2, function(err, data) { 
     if (err) console.log(err, err.code); // an error occurred, where it breaks 
     else  { 
     console.log("Subscribing...", data.ResponseMetadata.RequestId);//Prints this 
     console.log("Subscribing... with data", data); //Prints this fine 
     var params1 = { 
      Token: data.ResponseMetadata.RequestId, /* required */ 
      TopicArn: 'topic_ARN_from_console' /* required */ 
      //AuthenticateOnUnsubscribe: 'false' 
     }; 
     sns.confirmSubscription(params1, function(err, data) { 
      if (err) console.log(err, err.stack); // an error occurred 
      else { 
      console.log("Confirmed Sub", data); 
      }   // successful response 
     }); 
     } 
    }); 
    }).catch(console.error.bind(console)); 

错误,我得到:

POST https://sns.us-west-2.amazonaws.com/ 400 (Bad Request) 

VideoUploader.js:135错误:无效令牌

我要去哪里错了?

回答

0

SNS subscribe() documentation表示返回的数据只包含SubscriptionArn。它不包含确认标记。

我相信您正在查找的订阅确认标记由SNS发送到您在调用subscribe()时指示的端点。这就是SNS如何确认您控制端点的方式。您需要从该端点检索它,然后通过调用confirmSubscription()将其提供给SNS。

+0

对不起,什么端点?我怎样才能得到它(你有代码示例) – premunk

+0

我抬头看看我的这个环境,但这似乎没有帮助! – premunk

+0

你问了哪个端点。这是你的终点;你在你的subscribe()调用中提供的那个。 subscribe()调用通过向端点发送一个确认标记来准备订阅您的端点。然后您在confirmSubscription()调用中将该令牌提供给SNS。证明您控制端点并且没有错误输入或类似的内容是一次握手。请参阅http://docs.aws.amazon.com/sns/latest/api/API_Subscribe.html上所述的订阅操作。 – jarmod