我正在尝试通过 Google Apps 脚本从 Todoist API 中查询项目,模仿curl POST。
我最初尝试让 OAuth2 工作,但 token 不是持久的,所以我选择了 API's method使用单独的 API token 来交换有效 token 。
使用应用程序脚本的UrlFetchApp class ,我尝试在 Todoist 的 API 的 POST 请求中构造来检索任务项,并且我的 getTodoistToken()
函数确实正在检索有效的 token 响应,但 POST 命令发出以下 403:
"error_tag":"AUTH_CSRF_ERROR","error_code":0,"http_code":403,"error_extra":{"access_type":"web_session"},"error":"AUTH_CSRF_ERROR"}
有人可以推荐一个解决方案吗?非常感谢,代码如下:
function getTodoistToken() {
var url = "https://todoist.com/api/access_tokens/migrate_personal_token";
var data = {
"client_id": "[my unique client_id]",
"client_secret": "[my unique client_secret]",
"personal_token":"[my API token from Todoist dashboard]",
"scope": "data:read"
};
var payload = JSON.stringify(data);
var headers = {
"Content-Type":"application/json",
};
var options = {
"method":"POST",
"contentType" : "application/json",
"headers": headers,
"payload" : payload
};
var response = UrlFetchApp.fetch(url, options);
var json = response.getContentText();
var data = JSON.parse(json);
return(data.access_token);
}
function getTodoistTasks(){
var apiURL = "https://todoist.com/API/v7/sync";
var data = {
"token" : getTodoistToken(),
"sync_token" : '*',
"resource_types" : '["items"]'
};
var payload = JSON.stringify(data);
Logger.log(payload);
var headers = {
"Content-Type":"application/json",
};
var options = {
"method":"POST",
"contentType" : "application/json",
"headers": headers,
"payload" : payload,
"muteHttpExceptions" : true
};
var response = UrlFetchApp.fetch(apiURL, options);
Logger.log(response.getContentText());
}
最佳答案
我已经找到答案了。 Todoist API 文档有点含糊,似乎是围绕 POST 请求编写的,但要下载(同步)完整的任务列表,一个简单的 URL 编码的 GET 请求(如下所示)就可以解决问题:
function getTodoistTasks(){
var apiURL = "https://todoist.com/API/v7/sync";
var queryString = "?token=" + getTodoistTokenRev() + "&sync_token=%27*%27&resource_types=[%22items%22]";
//Get params
var fetchParameters = {};
fetchParameters.method = 'get';
fetchParameters.contentType = 'x-www-form-urlencoded';
fetchParameters.muteHttpExceptions = true;
//make request and return
var response = UrlFetchApp.fetch(apiURL + queryString, fetchParameters);
var syncData = JSON.parse(response.getContentText());
return(syncData);
}
关于javascript - 通过 Google Apps 脚本 POST 到 Todoist API 时出现 HTTP 错误 "AUTH_CSFR_ERROR",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44570581/