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/' 解析组名,所以我的问题没有解决,但在我当前的开发中避免了.