-2

我一直在使用Spreadsheetsupwork,因为我想在它们之间进行整合。

所以我正在尝试通过电子表格进行授权,使用文档步骤,一切都很好。但是当我授权我的帐户时,我看到response_type不是 a token,而是 a code

 function authorize() {
 return OAuth2.createService('upwork')

      // Set the endpoint URLs, which are the same for all Google services.
      .setAuthorizationBaseUrl('https://www.upwork.com/ab/account-security/oauth2/authorize')
      .setTokenUrl('https://www.upwork.com/ab/account-security/oauth2/token')

      // Set the client ID and secret, from the Google Developers Console.
      .setClientId('cleintID')
      .setClientSecret('clientSecret')
      .setRedirectUri('https://script.google.com/macros/d/{Script-ID}/usercallback') 
 
      .setTokenFormat(OAuth2.TOKEN_FORMAT.FORM_URL_ENCODED)
      
      // Set the name of the callback function in the script referenced
      // above that should be invoked to complete the OAuth flow.
      .setCallbackFunction('authCallback')

      // Set the property store where authorized tokens should be persisted.
      .setPropertyStore(PropertiesService.getUserProperties())
}

所以这是我的第一个问题,有没有办法将 response_typetoken设置为setResponseType

尽管按原样工作并使用response_type=code,但在授权后应将请求返回给

function as below function authCallback(request) {
  var driveService = authorize();
  Logger.log(request) //this is always null
  var isAuthorized = driveService.handleCallback(request);
  if (isAuthorized) {
    Logger.log('Yaaay')
    return HtmlService.createHtmlOutput('Success! You can close this tab.');
  } else {
    Logger.log('Naaay')
    return HtmlService.createHtmlOutput('Denied. You can close this tab');
  }
}

authorize()不叫??

最后下面是我正在使用的整个代码。

function authorize() {
 return OAuth2.createService('upwork')

      // Set the endpoint URLs, which are the same for all Google services.
      .setAuthorizationBaseUrl('https://www.upwork.com/ab/account-security/oauth2/authorize')
      .setTokenUrl('https://www.upwork.com/ab/account-security/oauth2/token')

      // Set the client ID and secret, from the Google Developers Console.
      .setClientId('cleintID')
      .setClientSecret('clientSecret')
      .setRedirectUri('https://script.google.com/macros/d/{Script-ID}/usercallback') 
 
      .setTokenFormat(OAuth2.TOKEN_FORMAT.FORM_URL_ENCODED)
      
      // Set the name of the callback function in the script referenced
      // above that should be invoked to complete the OAuth flow.
      .setCallbackFunction('authCallback')

      // Set the property store where authorized tokens should be persisted.
      .setPropertyStore(PropertiesService.getUserProperties())
}

function redirect() {
  var driveService = authorize();
  if (!driveService.hasAccess()) {
    var authorizationUrl = driveService.getAuthorizationUrl();
    var template = HtmlService.createTemplate(
        '<a href="<?= authorizationUrl ?>" target="_blank">Press here to authroze</a>.');
    template.authorizationUrl = authorizationUrl;
    var page = template.evaluate().setTitle('Authroize');
    SpreadsheetApp.getUi().showSidebar(page);
  }
}

function authCallback(request) {
  var driveService = authorize();
  Logger.log(request)
  var isAuthorized = driveService.handleCallback(request);
  if (isAuthorized) {
    Logger.log('Yaaay')
    return HtmlService.createHtmlOutput('Success! You can close this tab.');
  } else {
    Logger.log('Naaay')
    return HtmlService.createHtmlOutput('Denied. You can close this tab');
  }
}

更新:我发现 redirectURI 的格式不正确,因为谷歌要求 URI 的格式为https://script.google.com/macros/d/{SCRIPT ID}/usercallback,所以现在错误发生了变化,我遇到了失败

    Error: Error retrieving token: 404: {"<!DOCTYPE html>\n<html lang":"\"en\">\n<head>\n\n <meta name","":"undefined"," window.performance.mark 

":"undefined"," window.performance.mark(name);\n }\n\n function remove_mark(name) {\n window.performance ":"undefined"," window.performance.clearMarks ":"undefined"," window.performance.clearMarks(name);\n }\n\n function 

create_measure(name, startMark, endMark) {\n window.performance ":"undefined"," window.performance.measure ":"undefined"," window.performance.measure(name, startMark, endMark);\n }\n\n function remove_measure(name) {\n window.performance ":"undefined"," window.performance.clearMeasures ":"undefined"," window.performance.clearMeasures(name);\n }\n</script>\n <link 

rel":"\"stylesheet\" href","amp;site.application":"AccountSecurity","amp;site.version":"ed46c62af44692608c290dd0b498fa933b20c567","amp;site.environment":"prod","amp;server-error.status":"1",

"amp;server-error.label":"404+-+Agate","amp;server-error.traceId":"5c7d08790a6473b1-IAD\" height","l":"'+l:'';j.async","granted_time":1598271686} (line 541, file "Service")
4

1 回答 1

0
.setTokenUrl('https://www.upwork.com/ab/account-security/oauth2/token')

根据文档, tokenurl 应该是

发布 /api/v3/oauth2/token

利用:

.setTokenUrl('https://www.upwork.com/api/v3/oauth2/token')

406是由于不正确或没有Accept标题。设置此标头是由于

.setTokenFormat(OAuth2.TOKEN_FORMAT.FORM_URL_ENCODED)

删除它以使用默认接受标头:

//.setTokenFormat(OAuth2.TOKEN_FORMAT.FORM_URL_ENCODED)
于 2020-08-27T15:57:21.483 回答