soundcloud api在oAuth之后解决了问题

soundcloud api resolve issue after oAuth

本文关键字:解决 问题 之后 oAuth api soundcloud      更新时间:2023-09-26

我希望使用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);
});

有人能帮我理解我做错了什么吗?我似乎找不到任何地方可以效仿的榜样。让我如厕!

非常感谢,

James

对于其他面临同样问题的人,我已经回答了我自己的问题:

首先,我没有正确登录,因为Soundcloud的示例代码在他们的callback.html中出现错误,该代码用于在oAuth客户端登录流后返回网站。在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/…"的子资源获取端点,但我过去可以通过公共访问查询的任何内容仍然可以访问。由于我现在可以迭代登录的用户组,我不再需要通过公共资源"/resolve/"来解析组的名称,因此我的问题没有得到解决,而是在我当前的开发中避免了。