Google apps script 应用程序脚本-存储刷新令牌而不是项目属性

Google apps script 应用程序脚本-存储刷新令牌而不是项目属性,google-apps-script,youtube-api,google-sheets,Google Apps Script,Youtube Api,Google Sheets,我有一个Youtube Analytics电子表格,是根据这一集的脚本修改的 是否有方法存储刷新令牌而不是访问令牌,以便电子表格具有持久访问权限?我从OAuth游乐场获得了刷新令牌,但仅仅用刷新令牌替换访问令牌似乎不起作用。 很多人使用这个电子表格,如果可能的话,我想避免每小时验证 谢谢 看看这里的代码示例- 我改进了OAuth库,使其在令牌过期时自动刷新。这样,它的可扩展性非常强,您不必“引导”和存储任何内容 重要位元- function attemptTokenRefresh_() {

我有一个Youtube Analytics电子表格,是根据这一集的脚本修改的

是否有方法存储刷新令牌而不是访问令牌,以便电子表格具有持久访问权限?我从OAuth游乐场获得了刷新令牌,但仅仅用刷新令牌替换访问令牌似乎不起作用。 很多人使用这个电子表格,如果可能的话,我想避免每小时验证


谢谢

看看这里的代码示例-

我改进了OAuth库,使其在令牌过期时自动刷新。这样,它的可扩展性非常强,您不必“引导”和存储任何内容

重要位元-

function attemptTokenRefresh_() {
  var refreshToken = UserProperties.getProperty(refreshTokenPropertyName);
  if (!refreshToken) {
    Logger.log('No refresh token available to refresh with ' + tokenKey);
    return false;
  }
  var requestData = {
    method: 'post',
    payload: {
      client_id: CLIENT_ID,
      client_secret: CLIENT_SECRET,
      refresh_token: refreshToken,
      grant_type: 'refresh_token'
    }
  };
  Logger.log('Attempting token refresh');
  var response = UrlFetchApp.fetch(TOKEN_URL, requestData).getContentText();
  storeOAuthValues_(response);
  return true;
}

function storeOAuthValues_(response){
  var tokenResponse = JSON.parse(response);

  var accessToken = tokenResponse.access_token;
  // expires_in is in seconds and Date.now is ms
  var endMs = Date.now() + tokenResponse.expires_in * 1000;
  var refreshToken = tokenResponse.refresh_token;


  //store the token for later retrival
  UserProperties.setProperty(oauthTokenPropertyName, accessToken);
  if (refreshToken) { //on a refresh call we wont get a new refresh token, lets not wipe prev one out
    UserProperties.setProperty(refreshTokenPropertyName, refreshToken);
  }
  UserProperties.setProperty(oauthTokenExpiresPropertyName, endMs);
}

阿伦,谢谢你在这方面的帮助。我似乎没有从我的请求中获得刷新令牌。我在/youtubertner范围内,我可以在OAuth操场上得到一个。我只得到了一个访问令牌和到期。当我记录响应时,我也看不到刷新令牌。请确保在请求范围的身份验证时包含
&access\u type=offline
。这就是我所拥有的:
&scope=https://www.googleapis.com/auth/youtubepartner&response_type=code&access_type=offline
这看起来正确吗?这不是生成刷新令牌。您是否查看了我发布到github的代码链接?你的整个URL是什么?如果您使用
access\u type=offline
调用,您应该会得到一个刷新令牌。我正在运行此函数进行授权
函数getURLForAuthorization(){return AUTHORIZE_URL+'?客户端_id='+client_id+'&redirect_uri='+redirect_URL+'&scope=https://www.googleapis.com/auth/youtubepartner&response_type=code&access_type=offline“;//从上面的api指南中添加了访问类型}
如果我缺少什么,请告诉我。