2

Nest API を介してアクセス トークンを取得できないようです。Access Token URL への POST を 3 つの異なる方法で試みましたが、すべて同じ結果になります。

私は次のコードを使用しています:

<body>
  <button type = 'button' id = 'connect' class = 'btn btn-default'>Connect To Nest</button>
  <div id = 'pinArea'>
      <label for = 'pin'>Enter PIN Here: </label><input type = 'text' name = 'pin' id = 'pin'><br />
      <button type = 'button' class = 'btn btn-default' id = 'pinSubmit'>Submit</button>
  </div>


  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
  <script src="js/bootstrap.min.js"></script>
  <script type = 'text/javascript'>
      $(document).ready(function() {

          function makeid()
            {
                var text = "";
                var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";

                for( var i=0; i < 5; i++ )
                    text += possible.charAt(Math.floor(Math.random() * possible.length));

                return text;
            }

          $("#connect").click(function() {
              var state = makeid();
              window.open('https://home.nest.com/login/oauth2?client_id=MYCLIENTID&state='+state+'');
              $("#connect").hide();
              $("#pinArea").show();
          });

          $("#pinSubmit").click(function() {
              var pin = $("#pin").val();
              $.ajax({
                  url: "https://api.home.nest.com/oauth2/access_token?code="+pin+"&client_id=MYCLIENTID&client_secret=MYCIENTSECRET&grant_type=authorization_code",
                  //data: {code: pin, client_id: "MYCLIENTID", client_secret: "MMYCLIENTSECRET", grant_type: "authorization_code"},
                  type: "POST",
                  success: function(res) {
                      console.log(res);
                  },
                  error: function(e) {
                      console.log(e);
                  }
              });
          });
      });
  </script>

問題は、URL がアクセス トークンを送り返すはずのときに、コンソールに次のエラーが表示されることです。

XMLHttpRequest cannot load https://api.home.nest.com/oauth2/access_token. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://fatslug.ca' is therefore not allowed access. 

これを引き起こしている可能性のあるアイデアはありますか?私はそれを完全に間違っていますか?

4

2 に答える 2

4

問題は、Nest がトークン交換ステップで COR をサポートしていないことです。これは意図的なものだと思いますが、よくわかりません。

代わりに、Nest は、サーバーを構築し、そのサーバーを介してトークン交換をプロキシすることを好むようです。とても簡単です。

ただし、本当にブラウザでトークン交換を行いたい場合 (本番環境ではこれを行わないか、プライバシー/セキュリティを真剣に考えてはいけません)、cors-anywhere.com のようなサービスを使用できます。

"https://cors-anywhere.herokuapp.com/api.home.nest.com/oauth2/access_token?" +
"code="+auth.authorizationCode+"&" +
"client_id="+clientId+"&" +
"client_secret="+clientSecret+"&" +
"grant_type=authorization_code"

これにより、リクエストが cors-anywhere に送信され、リクエストに COR サポートが提供され、Nest にプロキシされます。

于 2014-06-25T15:04:46.847 に答える
0

NestがPOSTを必要とするほど、CORSとは関係がないと思います。

于 2015-04-18T22:46:39.797 に答える