如何将 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 做错了什么?
我的假设:
是不是,因为那个URL里面有那个/#/?我已经用 <base href="/">
和 $locationProvider.html5Mode(true);
试过了,但它没有改变任何东西。
是吧,因为我要服务的callback.html不在我的SPA环境中。这么更像一个独立的静态页面?
是否映射到 callback.html 有误?
我正在使用 webpack 作为构建工具。这有什么问题吗?
我是否必须在我的 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
});
});
}
我已经可以使用 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 做错了什么?
我的假设:
是不是,因为那个URL里面有那个/#/?我已经用
<base href="/">
和$locationProvider.html5Mode(true);
试过了,但它没有改变任何东西。是吧,因为我要服务的callback.html不在我的SPA环境中。这么更像一个独立的静态页面?
是否映射到 callback.html 有误?
我正在使用 webpack 作为构建工具。这有什么问题吗?
我是否必须在我的 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
});
});
}