我有一个必须完全在App Script中运行的程序(使用它的用户在他们的计算机上没有安装权限用于插件)。该程序根据引号中的信息制作商业报价和其他一些东西。
我需要复制引号以保存它们,然后授权代码在这些副本上运行,这样如果需要进行更改,它们就可以。
function onOpen(e) {
var authInfo = ScriptApp.getAuthorizationInfo(ScriptApp.AuthMode.FULL);
var authStatus = authInfo.getAuthorizationStatus();
var authRequired = (authStatus == ScriptApp.AuthorizationStatus.REQUIRED);
Logger.log(authStatus);
Logger.log(authRequired);
if ( authRequired ) {
Logger.log('Authorization required');
var authScript = '<script type="text/javascript">'+
'function openAuthWindow() {'+
'window.open("'+authInfo.getAuthorizationUrl()+'");'+
'}'+
'</script>';
var alert = HtmlService.createHtmlOutputFromFile('sidebarHeadOpen')
.append(HtmlService.createHtmlOutput(authScript).getContent())
.append(HtmlService.createHtmlOutputFromFile('authorizeAlert').getContent());
SpreadsheetApp.getUi().showModalDialog(alert, 'Authorization Required');
} else {
var frontend = e.source;
initialize(frontend);
}
}
我的问题是&#34; if(authRequired){...}&#34;仍然在运行,即使它不应该运行。 (即当authStatus为NOT_REQUIRED并且authRequired为false时)更重要的是,虽然日志应显示&#34;需要授权&#34;当该代码运行时,它不会。从该语句中运行的唯一行是&#34; var authScript = ...;&#34; line,&#34; var alert = ...;&#34; line,&#34; SpreadsheetApp.getUi()。showModalDialog();&#34;线。这是我试图让不发生的事情。有没有办法做到这一点?
供参考,这就是alert.html的样子:
<html>
<head>
<base target="_top">
<script type="text/javascript">
function openAuthWindow() {
window.open("'+authInfo.getAuthorizationUrl()+'");
}
</script>
</head>
<body>
Please authorize this copy of the form to run.<br>
<br>
Without authorization, it will not do anything automatically.<br>
<br>
<input type="button" value="Review Permissions" onclick="google.script.host.close(); openAuthWindow(); google.script.run.runInstall();" />
</body>
</html>
(另外,是否有一种更简单的方式来提示授权?甚至可以通过编程方式获取授权而不提示用户?我一直在寻找一周,而且还没找到一个。 )
答案 0 :(得分:0)
我发现此相关的issue 677 - Allow end users to provide OAuth credentials发布在google-apps-script-issues中,并且基于该主题有一些解决方法,您也可以尝试,其中一个发布在GitHub中 - OAuthService for Google Apps Script其中开发人员包装oAuth在库中流动,您也可以将其添加到自己的脚本中。
此SO帖子中提供的解决方案 - Google API Authorization when 'Executing the app as me.'有关谷歌应用脚本内授权的解决方案也可能有所帮助。