应用脚本会抛出无效的状态令牌'在同意屏幕上自动化后

时间:2016-10-27 15:25:40

标签: google-apps-script oauth-2.0 google-drive-api

我希望授权我的webapp在用户的appfolder中创建一个文件夹,以保存应用程序的数据文件。

为此,我需要请求范围https://www.googleapis.com/auth/drive.appfolder

到目前为止,我有以下代码:

var CLIENT_ID            = '3941...';
var CLIENT_SECRET        = 'DY_P...';
var SCRIPT_ID            = '1XAF...';

var appfolder_scope     = 'https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive.appfolder';
var redirectURI         = 'https%3A%2F%2Fscript.google.com%2Fmacros%2Fd%2F'+ SCRIPT_ID + '%2Fusercallback';
var AuthEndpoint        = 'https://accounts.google.com/o/oauth2/v2/auth';



function getCallbackURL(callbackFunction) {

   var url = ScriptApp.getService().getUrl();      // Ends in /exec (for a web app)
   url = url.slice(0, -4) + 'usercallback?state='; // Change /exec to /usercallback
   var stateToken = ScriptApp.newStateToken()
        .withMethod(callbackFunction)
        .withTimeout(120)
        .createToken();
   return url + stateToken;
}


function generateAuthRequestURL() {
  var AuthRequest = AuthEndpoint;
  var Query = '?'
      + 'scope=profile%20' + appfolder_scope
      + '&state=' + getCallbackURL(cb)
      + '&redirect_uri=' + redirectURI
      + '&response_type=code'
      + '&client_id=' + CLIENT_ID
    //+ '&login_hint=...%40gmail.com'
      ;
  AuthRequest += Query;
  Logger.log(AuthRequest);      
  return AuthRequest;
}

function cb(response) {
  Logger.log(response);
}

当我点击generateAuthRequestURL()生成的网址时,它会转到同意屏幕,我点击允许。但是每当我得到“状态令牌无效或已经过期”时,

发布了webapp,我测试了exec和dev版本,结果相同。我也尝试过使用和不使用login_hint。

我还尝试了Apps-Script-Folder-Library以及gdrive-appdata。我无法让第一个工作,而第二个我甚至不知道如何使用。

1 个答案:

答案 0 :(得分:0)

根据此thread,确保您已将项目密钥放入相关字段。在制作脚本副本后更改密钥时可能会发生此错误。

您还可以查看建议的issue,以确保您使用正确的项目密钥。

以下是一些可能也有帮助的相关论坛: