在oAuth之后,soundcloud api解决了问题

时间:2015-12-13 16:57:22

标签: javascript oauth soundcloud

我希望通过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);
});

任何人都可以帮助我理解我做错了什么 - 我似乎找不到任何地方可以找到的例子。开车送我便盆!

非常感谢,

詹姆斯

1 个答案:

答案 0 :(得分:0)

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

首先,我没有正确登录,原因是他们的callback.html中的Soundcloud示例代码出错,用于在oAuth客户端登录流程后返回该站点。在Soundcloud的示例callback.html中,代码为:

A               B               C        D  E   F   G       H   I       J                   K
AET Entered     AET + 30        =    volts  lo  i1  i0      vl1 vl0     Value AET           Value Time +30
1/08/15 10:00   1/08/15 10:00   TRUE    36  36  36  36      36  36      42217.4166666667000 42217.4166666667000
1/08/15 10:30   1/08/15 10:30   TRUE    23  23  23  23      23  23      42217.4375000000000 42217.4375000000000
1/08/15 11:00   1/08/15 11:00   TRUE    44  44  44  44      44  44      42217.4583333333000 42217.4583333333000
1/08/15 11:30   1/08/15 11:30   TRUE    55  44  44  #N/A    44  #N/A    42217.4791666667000 42217.4791666667000
1/08/15 12:00   1/08/15 12:00   TRUE    13  55  55  #N/A    55  #N/A    42217.5000000000000 42217.5000000000000
1/08/15 12:30   1/08/15 12:30   TRUE    32  13  13  #N/A    13  #N/A    42217.5208333333000 42217.5208333333000
1/08/15 13:00   1/08/15 13:00   TRUE    56  32  32  #N/A    32  #N/A    42217.5416666667000 42217.5416666667000
1/08/15 13:30   1/08/15 13:30   TRUE    70  56  56  #N/A    56  #N/A    42217.5625000000000 42217.5625000000000
1/08/15 14:00   1/08/15 14:00   FALSE   43  70  70  #N/A    70  #N/A    42217.5833333333000 42217.5833333334000
1/08/15 14:30   1/08/15 14:30   TRUE    31  43  43  #N/A    43  #N/A    42217.6041666667000 42217.6041666667000
1/08/15 15:00   1/08/15 15:00   TRUE    21  31  31  #N/A    31  #N/A    42217.6250000000000 42217.6250000000000
1/08/15 15:30   1/08/15 15:30   FALSE   11  21  21  #N/A    21  #N/A    42217.6458333333000 42217.6458333334000
1/08/15 16:00   1/08/15 16:00   TRUE    66  11  11  #N/A    11  #N/A    42217.6666666667000 42217.6666666667000
1/08/15 16:30   1/08/15 16:30   TRUE    45  66  66  #N/A    66  #N/A    42217.6875000000000 42217.6875000000000
1/08/15 17:00   1/08/15 17:00   FALSE   23  45  45  #N/A    45  #N/A    42217.7083333333000 42217.7083333334000

必须改为:

    <body onload="window.opener.setTimeout(window.opener.SC.connectCallback, 1)">

如果应用程序设置正确配置到同一域(localhost或生产,但不是两者的混合),这允许弹出窗口正确关闭并完成登录流程。

除此回调外,我还添加了以下代码:

    <body onload="window.setTimeout(window.opener.SC.connectCallback, 1)">

在我的后续页面中,我现在可以获取任何数据作为'/ me / ...'端点的子资源,但我以前能够通过公共访问查询的任何内容仍然可以访问。由于我现在可以遍历登录的用户组,我不再需要通过公共资源'/ resolve /'来解析组的名称,所以我的问题没有解决,但在我当前的开发中避免了。