【问题标题】:How to authorize and post/update Trello card from a Google docs script如何从 Google 文档脚本授权和发布/更新 Trello 卡片
【发布时间】:2013-11-05 00:19:36
【问题描述】:

我有一个 Google 文档电子表格,我想用它来更新 Trello 中引用的卡片。我在 oauth 和通过他们的 HTTP API 提取数据方面取得了一些成功,但我坚持以下几点:

1) Trello 的 code.js 似乎需要一个 window 对象,而 Google Doc 脚本没有提供该对象。所以,我被他们的 HTTP API 卡住了。

2) 通过 OAuth 进行身份验证有效,但仅授予我读取权限。我无法使用我能够获得的令牌更新卡片。

function test() {
  var oauthConfig = UrlFetchApp.addOAuthService("trello");
  oauthConfig.setAccessTokenUrl("https://trello.com/1/OAuthGetAccessToken");
  oauthConfig.setRequestTokenUrl("https://trello.com/1/OAuthGetRequestToken");
  oauthConfig.setAuthorizationUrl("https://trello.com/1/authorize?key=" + consumerKey + "&name=trello&expiration=never&response_type=token&scope=read,write");
  //oauthConfig.setAuthorizationUrl("https://trello.com/1/OAuthAuthorizeToken");  <-- this only gives read access.  Cannot POST
  oauthConfig.setConsumerKey(consumerKey);
  oauthConfig.setConsumerSecret(consumerSecret);

  var url = 'https://trello.com/1/cards/yOqEgvzb/actions/comments&text=Testing...';  
  var postOptions = {"method" : "post",
                   "oAuthServiceName": "trello",
                   "oAuthUseToken": "always"};

   var response = UrlFetchApp.fetch(url, postOptions);  // "Request failed for returned code 404. Truncated server response: Cannot POST"

   Logger.log(response.getContentText());
}

我发现了一些相关的问题,但没有直接的答案:

How to get a permanent user token for writes using the Trello API?

Trello API: vote on a card

Trello API: How to POST a Card from Google Apps Script (GAS)

Google apps script oauth connect doesn't work with trello

非常感谢您提前提供的任何建议。

【问题讨论】:

  • 您是否有理由使用 OAuth 而不是替代方案:trello.com/docs/gettingstarted/authorize.html?客户端授权听起来更像您正在寻找的。​​span>
  • 这会给我一个弹出窗口。有关如何呈现并处理/存储令牌以供后续调用的任何示例?

标签: google-apps-script oauth trello


【解决方案1】:

on 1) 是的,您不能使用服务器 gas 中的库,它意味着从浏览器运行。 在 2) 上,我已经从 GAS 完成了它,具有写访问权限,没有问题。您需要使用以下格式: https://api.trello.com/1/.../xxxx?key=yyyyyy&token=zzzzzzz&...

当你获得令牌时,你需要请求永久访问(没有过期)和写访问,如: https://trello.com/1/authorize?key="+key+"&name=xxxxxxx&expiration=never&response_type=token&scope=read,write"

如:

function postNewCardCommentWorker(cardId, comment, key, token) {

  var commentEncoded=encodeURIComponent(comment);
  var url = "https://api.trello.com/1/cards/"+cardId+"/actions/comments?text="+commentEncoded+"&key="+key+"&token="+token;
  var options =
     {
       "method" : "POST"
     };

  UrlFetchApp.fetch(url, options);
}

【讨论】:

  • 重新考虑自动获取令牌,我做的最多的是向用户显示一个链接,就像我在答案中建议的那样,并指示用户复制/粘贴生成的令牌。
  • 任何显示弹出身份验证页面并实际解析结果令牌的示例?让用户复制身份验证令牌是一个非常糟糕的安全策略,更不用说糟糕的用户体验了。
  • 您将无法解析安全跨域问题的弹出窗口,并且您可以 urlfetch 它,因为它重新进行身份验证并单击批准。但是,您可以将重定向 url 提供给将再次打开您的应用程序脚本的 api。就我而言,我没有付出太多努力,因为用户只安装了一次。见trello.com/docs/gettingstarted/oauth.html
  • 我查看了 Trello 的 oauth,但该调用仅授予我读取权限。我无法通过 API 请求更多。
  • 好的,做一些研究。您可能无法使用 oauthConfig 使其工作。由于 trello 允许使用不会过期的令牌,因此很容易自己手动完成。为避免用户在设置过程中复制/粘贴令牌,请使用参数 callback_method”(片段)和“return_url”为gas_service_url。这将导致该 URL 与“token=thetoken”一起),您可以处理该请求并将其全局存储。您可以使用脚本属性、scriptdb、电子表格等将其全局存储在 docs 脚本中。请参阅trello.com/docs/gettingstarted/authorize.html
【解决方案2】:

为了获得写入权限,您需要更改授权 url。 这个例子适合我

  var oauthConfig = UrlFetchApp.addOAuthService("trello");
  oauthConfig.setAccessTokenUrl("https://trello.com/1/OAuthGetAccessToken");
  oauthConfig.setRequestTokenUrl("https://trello.com/1/OAuthGetRequestToken");
  oauthConfig.setAuthorizationUrl("https://trello.com/1/OAuthAuthorizeToken?scope=read,write");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-30
    • 2015-05-07
    • 2016-07-11
    • 2020-03-19
    • 2020-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多