我目前正在使用NEST API开发非常简单的应用程序:
问题: 当我试图从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等。
请帮忙:)
答案 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