如何使用 Asana 的 JS/Ruby 库连接到 Asana 的 API
How to connect to Asana's API using Asana's JS/Ruby library
我有一个用 Ruby 编写的后端 API 和一个使用 Angular 的客户端应用程序。我想通过 Angular 应用程序对用户进行身份验证。
因此,我在 Asana 上创建了我的应用程序。不过我遇到了一些问题:
第一个问题:我正在使用 Authorisation Code Grant
的授权端点。阅读文档后,我意识到我必须改用 Implicit Grant
,这更适合基于浏览器的应用程序,但是当我将其更改为 Implicit Grant
,保存并重新加载页面时,它变回 Authorisation Code Grant
。
然后在我的 Angular 应用程序上,我有以下代码:
var client = Asana.Client.create({
clientId: 133,
clientSecret: 'mysecretcode',
redirectUri: 'http://localhost:7699/profile'
});
client.useOauth({
flowType: Asana.auth.PopFlow
});
client.authorize().then(function () {
console.log('Auth completed');
}).catch(function (err) {
console.log(err);
});
client.users.me().then(function (result) {
console.log(result);
});
以上几乎可以工作。我确实被重定向到授权部分的 Asana,一旦我点击 "Allow",我被重定向回我的应用程序,并且我确实得到了一个代码作为 url 的一部分。代码类似于:
http://localhost:7699/profile#access_token=very_long_string
如果我正确理解文档,我可以使用上面的 access_token
来提出我的第一个请求。当我尝试使用 Asana 的 JS 库发出这样的请求时:
client.users.me().then(function (result) {
console.log(result);
});
请注意,我所指的 client
对象与我之前为授权创建的对象相同。上面returns一个401,未经授权的代码。
然后我尝试了以下方法:
var params = {
grant_type: 'refresh_token',
client_id: 876787,
client_secret: 'some_secret',
redirect_uri: 'http://localhost:7699/profile',
code: my_access_code
};
$http.post('https://app.asana.com/-/oauth_token', params).then(function (result) {
console.log(result);
});
这也让我得到了 401 未经授权的代码。
我做错了什么?
我建议您首先将 the node-asana examples directory 中的示例之一复制粘贴到您的应用中,然后看看是否可行。
如果您想继续使用弹出流程,我怀疑您遗漏的是 popup_receiver.html. This should be on the page pointed to by your redirect_uri
, and tells the page that created the popup the auth data it needs to make subsequent requests. Also note how the page that originates the authentication request (popup.html 中对 Asana.auth.PopupFlow.runReceiver();
的调用)包括传递给 [= 的回调中身份验证后发生的操作=12=]:这确保这些操作仅在用户通过弹出窗口完成身份验证后发生。
我有一个用 Ruby 编写的后端 API 和一个使用 Angular 的客户端应用程序。我想通过 Angular 应用程序对用户进行身份验证。
因此,我在 Asana 上创建了我的应用程序。不过我遇到了一些问题:
第一个问题:我正在使用 Authorisation Code Grant
的授权端点。阅读文档后,我意识到我必须改用 Implicit Grant
,这更适合基于浏览器的应用程序,但是当我将其更改为 Implicit Grant
,保存并重新加载页面时,它变回 Authorisation Code Grant
。
然后在我的 Angular 应用程序上,我有以下代码:
var client = Asana.Client.create({
clientId: 133,
clientSecret: 'mysecretcode',
redirectUri: 'http://localhost:7699/profile'
});
client.useOauth({
flowType: Asana.auth.PopFlow
});
client.authorize().then(function () {
console.log('Auth completed');
}).catch(function (err) {
console.log(err);
});
client.users.me().then(function (result) {
console.log(result);
});
以上几乎可以工作。我确实被重定向到授权部分的 Asana,一旦我点击 "Allow",我被重定向回我的应用程序,并且我确实得到了一个代码作为 url 的一部分。代码类似于:
http://localhost:7699/profile#access_token=very_long_string
如果我正确理解文档,我可以使用上面的 access_token
来提出我的第一个请求。当我尝试使用 Asana 的 JS 库发出这样的请求时:
client.users.me().then(function (result) {
console.log(result);
});
请注意,我所指的 client
对象与我之前为授权创建的对象相同。上面returns一个401,未经授权的代码。
然后我尝试了以下方法:
var params = {
grant_type: 'refresh_token',
client_id: 876787,
client_secret: 'some_secret',
redirect_uri: 'http://localhost:7699/profile',
code: my_access_code
};
$http.post('https://app.asana.com/-/oauth_token', params).then(function (result) {
console.log(result);
});
这也让我得到了 401 未经授权的代码。
我做错了什么?
我建议您首先将 the node-asana examples directory 中的示例之一复制粘贴到您的应用中,然后看看是否可行。
如果您想继续使用弹出流程,我怀疑您遗漏的是 popup_receiver.html. This should be on the page pointed to by your redirect_uri
, and tells the page that created the popup the auth data it needs to make subsequent requests. Also note how the page that originates the authentication request (popup.html 中对 Asana.auth.PopupFlow.runReceiver();
的调用)包括传递给 [= 的回调中身份验证后发生的操作=12=]:这确保这些操作仅在用户通过弹出窗口完成身份验证后发生。