soundcloud api 解决 oAuth 后的问题
soundcloud api resolve issue after oAuth
我希望使用 JavaScript:
可以轻松解决 Soundcloud API 的问题
未经授权,以下代码可以正常工作:
var group = 'https://soundcloud.com/groups/chilled';
SC.initialize({
client_id: 'MY_CLIENT_ID',
redirect_uri: 'http://localhost:49957/tn/callback.html'
});
// Resolve works fine and gives number ID of group
SC.resolve(group + '?client_id=' + client_id).then(function (g) {
console.log('Group 1: ' + g.id);
});
在我授权用户后:
SC.connect().then(function () {
return SC.get('/me');
}).then(function (me) {
authUser = me.id
});
// Resolve no longer works and i get 401 unauthorised
SC.resolve(group + '?client_id=' + client_id).then(function (g) {
console.log('Group 1: ' + g.id);
});
任何人都可以帮助我理解我做错了什么 - 我似乎找不到任何地方可以效仿的例子。逼我上厕所!
非常感谢,
詹姆斯
对于其他面临同样问题的人,我已经回答了我自己的问题:
首先,由于 Soundcloud 在他们的 callback.html 示例代码中的错误,我没有正确登录,用于在 oAuth 客户端登录流程后 return 到站点。在 Soundcloud 的示例 callback.html 中,代码:
<body onload="window.opener.setTimeout(window.opener.SC.connectCallback, 1)">
必须修改为:
<body onload="window.setTimeout(window.opener.SC.connectCallback, 1)">
如果应用程序设置正确配置到同一域(本地主机或生产,但不是两者的混合),这允许弹出窗口正确关闭并完成登录流程。
除了这个回调,我还添加了以下代码:
var params = getSearchParameters();
window.opener.oAuthToken = params.code;
function getSearchParameters() {
var prmstr = window.location.search.substr(1);
return prmstr != null && prmstr != "" ? transformToAssocArray(prmstr) : {};
}
function transformToAssocArray(prmstr) {
var params = {};
var prmarr = prmstr.split("&");
for (var i = 0; i < prmarr.length; i++) {
var tmparr = prmarr[i].split("=");
params[tmparr[0]] = tmparr[1];
}
return params;
}
在我的后续页面中,我现在可以获得作为“/me/...”端点的 sub-resource 的任何数据,但我以前可以通过 public 查询的任何数据访问仍然是可访问的。由于我现在可以遍历登录的用户组,我不再需要通过 public 资源 '/resolve/' 解析组名,所以我的问题没有解决,但在我当前的开发中避免了.
我希望使用 JavaScript:
可以轻松解决 Soundcloud API 的问题未经授权,以下代码可以正常工作:
var group = 'https://soundcloud.com/groups/chilled';
SC.initialize({
client_id: 'MY_CLIENT_ID',
redirect_uri: 'http://localhost:49957/tn/callback.html'
});
// Resolve works fine and gives number ID of group
SC.resolve(group + '?client_id=' + client_id).then(function (g) {
console.log('Group 1: ' + g.id);
});
在我授权用户后:
SC.connect().then(function () {
return SC.get('/me');
}).then(function (me) {
authUser = me.id
});
// Resolve no longer works and i get 401 unauthorised
SC.resolve(group + '?client_id=' + client_id).then(function (g) {
console.log('Group 1: ' + g.id);
});
任何人都可以帮助我理解我做错了什么 - 我似乎找不到任何地方可以效仿的例子。逼我上厕所!
非常感谢,
詹姆斯
对于其他面临同样问题的人,我已经回答了我自己的问题:
首先,由于 Soundcloud 在他们的 callback.html 示例代码中的错误,我没有正确登录,用于在 oAuth 客户端登录流程后 return 到站点。在 Soundcloud 的示例 callback.html 中,代码:
<body onload="window.opener.setTimeout(window.opener.SC.connectCallback, 1)">
必须修改为:
<body onload="window.setTimeout(window.opener.SC.connectCallback, 1)">
如果应用程序设置正确配置到同一域(本地主机或生产,但不是两者的混合),这允许弹出窗口正确关闭并完成登录流程。
除了这个回调,我还添加了以下代码:
var params = getSearchParameters();
window.opener.oAuthToken = params.code;
function getSearchParameters() {
var prmstr = window.location.search.substr(1);
return prmstr != null && prmstr != "" ? transformToAssocArray(prmstr) : {};
}
function transformToAssocArray(prmstr) {
var params = {};
var prmarr = prmstr.split("&");
for (var i = 0; i < prmarr.length; i++) {
var tmparr = prmarr[i].split("=");
params[tmparr[0]] = tmparr[1];
}
return params;
}
在我的后续页面中,我现在可以获得作为“/me/...”端点的 sub-resource 的任何数据,但我以前可以通过 public 查询的任何数据访问仍然是可访问的。由于我现在可以遍历登录的用户组,我不再需要通过 public 资源 '/resolve/' 解析组名,所以我的问题没有解决,但在我当前的开发中避免了.