如何使用Asana的JS / Ruby库

时间:2016-08-26 09:36:47

标签: javascript asana

我有一个用Ruby编写的后端API和一个使用Angular的客户端App。我想通过Angular应用程序对用户进行身份验证以对用户进行身份验证。

因此我在Asana上创建了我的应用程序。我有一些问题:

第一个问题:我使用Authorisation Code Grant的授权端点。阅读文档后,我意识到我必须使用Implicit Grant,这更适合基于浏览器的应用,但是当我将其更改为Implicit Grant时,保存并重新加载页面,它更改回Authorisation Code Grant

然后在我的Angular App上,我有以下代码:

            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授权部分,一旦我点击"允许",我重定向回我的应用程序,我确实得到了代码作为网址的一部分。代码类似于:

http://localhost:7699/profile#access_token=very_long_string

如果我理解正确的文档,我可以使用上面的access_token来提出我的第一个请求。当我尝试使用Asana的JS库来提出这样的请求时:

client.users.me().then(function (result) {
    console.log(result);
});

请注意我提到的client对象与我之前创建的用于授权的对象相同。以上内容返回401,Unauthorized代码。

然后我尝试了以下内容:

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未经授权的代码。

我在这里做错了什么?

1 个答案:

答案 0 :(得分:1)

我建议您首先将the node-asana examples directory中的一个示例复制粘贴到您的应用中,然后查看是否有效。

如果您想继续使用弹出流程,我怀疑您遗失的是popup_receiver.html中对Asana.auth.PopupFlow.runReceiver();的呼叫。这应该在您的redirect_uri指向的页面上,并告诉创建弹出窗口的页面,它需要进行后续请求所需的auth数据。另请注意,发起身份验证请求的页面(popup.html)如何包含在传递给then的回调中进行身份验证后发生的操作:这可确保仅在用户通过弹出窗口完成身份验证后才会执行这些操作。