如何将 Soundcloud API(身份验证)与 Angular.js 一起使用

How to use Soundcloud API (authentication) with Angular.js

我已经可以使用 public Soundcloud API,但我正在努力使用 callback.html 来获取登录对话框。

在 Soundcloud,我的应用程序具有以下 callback.html 的回调重定向 uri:http://localhost:8080/#/callback

在那条路线上,我的 angular 应用定义了一个具有所需回调模板的控制器:

<!DOCTYPE html>
<html lang="en">
    <head><meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <title>Connect with SoundCloud</title>
    </head>
    <body onload="window.opener.setTimeout(window.opener.SC.connectCallback, 1)">
        <b style="width: 100%; text-align: center;">This popup should automatically close in a few seconds</b>
    </body>
</html>

在我的根控制器中我已经定义了:

SC.initialize({
    client_id: "####",
    redirect_uri: "http://localhost:8080/#/callback",
});

这就是 public API 在另一个控制器上为我工作的原因:

SC.get('/resolve', {
     url: 'https://soundcloud.com/someuser'
}, function(user) {
    console.log(user);
});

但在同一个控制器中,以下 returns 401:

SC.get('/me', function(me) {
    console.log(me);
});

当然可以,因为没有弹出登录对话框!

那么我设置 callback.html 做错了什么?

我的假设:

  1. 是不是,因为那个URL里面有那个/#/?我已经用 <base href="/">$locationProvider.html5Mode(true); 试过了,但它没有改变任何东西。

  2. 是吧,因为我要服务的callback.html不在我的SPA环境中。这么更像一个独立的静态页面?

  3. 是否映射到 callback.html 有误?

  4. 我正在使用 webpack 作为构建工具。这有什么问题吗?

  5. 我是否必须在我的 Soundcloud 应用程序中设置重定向 uri 以外的其他内容?

我非常希望有人能帮助我!

我的网站也是angularjs+soundcloud, 可以肯定的是,我在您的代码中没有看到 SC.connect 函数,是在其他地方吗?

我在控制器中的功能:

this.connect= function(){

            SC.connect(function(response){

                SC.get("/me", function(response){
                    // console.log(response);
                    var data={};
                    data.token = SC.accessToken();
                    data.id = response.id;
                    $rootScope.user.sc_id=data.id;
                    $rootScope.user.sc_token=data.token;
                    soundcloud.saveToken(data);
                    soundcloud.generateAuthString();

                    //other things

        });
    });

 }