在Google Apps Script中调用Todoist SYNC API遇Invalid CSRF token错误求助
解决Todoist Sync API请求中的CSRF Token无效错误
我需要实现的功能是获取当日所有任务并存入Google Sheets文件,用于跟踪进度。尝试模仿cURL请求(获取所有项目的示例)并参考相关方案后仍未成功,遇到以下错误:
{ error_tag = AUTH_INVALID_CSRF_TOKEN, error_extra = { access_type = web_session, retry_after=2.0, event_id = f187e5d823184fd0997935e031b017ec }, error_code = 410.0, http_code = 403.0, error = Invalid CSRF token }
我的原始代码:
function myFunction() { var apiURL = "https://todoist.com/API/v9/sync"; var queryString = "?token=<my_token>&sync_token=%27*%27&resource_types=[%22projects%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()); Logger.log(syncData); return(syncData); }
问题原因及修复方案
Todoist Sync API要求使用POST方法提交请求,且参数需放在请求体中,你的代码使用GET方法并将参数放在URL中,触发了CSRF验证机制导致失败。以下是修正后的代码:
function myFunction() { var apiURL = "https://todoist.com/API/v9/sync"; var token = "<你的API令牌>"; // 替换为实际的Todoist API令牌 // 构建请求参数 var payload = { token: token, sync_token: "*", // 正确的同步令牌格式,无需单引号 resource_types: '["tasks"]' // 要获取任务,将resource_types改为tasks;若需项目可保留["projects"] }; var fetchParameters = { method: 'post', contentType: 'application/x-www-form-urlencoded', payload: payload, muteHttpExceptions: true }; // 发送请求并处理响应 var response = UrlFetchApp.fetch(apiURL, fetchParameters); var syncData = JSON.parse(response.getContentText()); Logger.log(syncData); // 筛选当日任务,用于后续写入Google Sheets var today = new Date(); var formattedToday = Utilities.formatDate(today, Session.getScriptTimeZone(), "yyyy-MM-dd"); var todayTasks = syncData.tasks.filter(task => task.due?.date === formattedToday); Logger.log("当日任务:", todayTasks); return syncData; }
关键修改点说明
- 请求方法改为POST:Todoist Sync API仅接受POST请求,GET请求会触发CSRF验证错误
- 参数移至请求体:将token、sync_token等参数放在payload中,而非URL查询字符串,符合API规范
- 修正sync_token格式:移除多余的单引号,正确格式为
"*" - 调整resource_types:若需获取任务,将值改为
["tasks"],原代码中的["projects"]仅返回项目列表 - 添加当日任务筛选逻辑:示例中增加了筛选当日任务的代码,方便后续写入Google Sheets
内容的提问来源于stack exchange,提问作者Clarissa De Simoni
相关产品推荐
相关产品推荐

