Tizen磨损:从Nest API获取数据时出现401响应错误

时间:2016-09-09 08:50:39

标签: jquery tizen nest-api tizen-wearable-sdk tizen-web-app

我目前正在使用NEST API开发非常简单的应用程序:

  • Tizen 2.3.1 SDK,
  • 基于Web(JS,HTML,CSS)的应用程序,
  • 可穿戴设备是目标,
  • 独立应用
  • 由三星Galaxy Gear S2手表驱动

问题: 当我试图从NEST API获取数据时,我收到了401错误。

首先,我获得了令牌并且它完美无缺:

{:before => ...}

这意味着我与手机配对,互联网连接正常,我有适当的权限。 令牌肯定是有效的。我已经使用Postman,curl命令和Android的REST客户端应用程序(3种不同的解决方案正常工作)进行了检查。

获取令牌后,我使用该令牌进行REST API调用,看起来就是这样:

function authNest() {
$.ajax({
    url: authUrl,
    type: "POST",
    dataType: "json",
    success: function(data) {
        console.log(data.access_token);
        getNest(data.access_token);
    },
    error: function(err) {
        console.log(err);
    }
});

但是我得到了错误回复。我还尝试仅使用XMLHttpRequest(没有ajax / jquery)的请求 - 我得到了相同的错误响应。

错误:

  

{" readyState":4,
  " responseText的":" {\"错误\":\"未授权\" \"类型\&#34 ;: \" https://developer.nest.com/documentation/cloud/error-messages#auth-error \" \"消息\":\"未授权\" \"例如\&#34 ;:\" bfd045c0-e7ff-4a75-BBBA-e6199be03c4a \"}&#34 ;,   " status":401," statusText":"未授权" }

所以我至少得到了服务器响应。但是我没有授权,而且我完全不知道WTF。

在Tizen磨损上oAuth2.0有问题吗? 为什么服务器不想接受我的请求,即使它之前返回了令牌? 也许是一些隐藏的约束?

当然,我已经在config.xml中定义了一些功能和特权:internet,network.internet,network.wifi,download,location等。

请帮忙:)

3 个答案:

答案 0 :(得分:1)

经过几个小时的调试和搜索后,我找到了答案。 首先,Tizen浏览器正在发送带有正确标头和令牌的请求。 然后它获得了307个HTTP代码 - 当然要求重定向。 如果没有在Chrome开发人员工具(控制台+网络标签)等外部工具中进行调试,则无法看到它。 Tizen Studio / sdb dlog什么都没有显示! 在后台Tizen正确重定向 - 但几乎正确! 对端点的第二个请求不包含标头和令牌,因此无法在服务器上进行授权。这就是为什么我最后得到401。

答案 1 :(得分:0)

尝试以下方法:

 xhr.setRequestHeader("Content-Type", "application/json");
 xhr.setRequestHeader("Authorization", "Bearer " + token);

添加

dataType: "json",

答案 2 :(得分:0)

请尝试此解决方案:

url: "https://developer-api.nest.com?auth="+token