我一直在使用Spreadsheets和upwork,因为我想在它们之间进行整合。
所以我正在尝试通过电子表格进行授权,使用文档步骤,一切都很好。但是当我授权我的帐户时,我看到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_type
token
设置为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")