【问题标题】:soundcloud api resolve issue after oAuthsoundcloud api 解决 oAuth 后的问题
【发布时间】:2015-12-13 16:57:22
【问题描述】:

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

谁能帮助我理解我做错了什么 - 我似乎无法在任何地方找到一个可以效仿的例子。逼我上厕所!

非常感谢,

詹姆斯

【问题讨论】:

  • 也许您缺少 client_secret 信息?仔细看看developers.soundcloud.com/docs/api/guide#authentication
  • @Michael,当我包含 client_secret 令牌 [未显示值] 时没有区别。 SC.resolve(group + '?client_id=' + client_id+ ';client_secret=' + client_secret).then(function (g)...

标签: javascript oauth soundcloud


【解决方案1】:

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

首先,我没有正确登录,因为 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/”来解析组的名称,所以我的问题没有解决,但在我当前的开发中避免了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-12
    • 1970-01-01
    • 1970-01-01
    • 2013-08-29
    • 2011-12-22
    • 2023-04-07
    • 1970-01-01
    相关资源
    最近更新 更多