2016-08-03 9 views
1

Ich habe ein Programm, das vollständig in App Script ausgeführt werden muss (die Benutzer, die es verwenden, haben keine Installationsrechte auf ihrer Computer für Addons). Das Programm erstellt Geschäftsanfragen und eine Menge anderer Dinge basierend auf den Informationen in den Anführungszeichen.showModalDialog() wird ausgeführt, obwohl das if() - Gatter keine wahr ist

Ich muss Kopien der Anführungszeichen machen, um sie zu speichern, dann den Code autorisieren, auf diesen Kopien zu laufen, so dass, wenn Änderungen gemacht werden müssen, sie sein können.

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); 
    } 
} 

Mein Problem ist, dass der Code in "if (authRequired) {...}" noch ausgeführt wird, auch wenn es nicht sollte. (d. h. wenn authStatus NOT_REQUIRED ist und authRequired false ist) Das Protokoll sollte zwar "Authorization required" anzeigen, wenn dieser Code ausgeführt wird, aber nicht. Die einzigen Zeilen, die von dieser Anweisung ausgehen, sind "var authScript = ...;" Linie, der "var alert = ...;" Zeile und die "SpreadsheetApp.getUi(). showModalDialog();" Linie. Welches ist die Sache, die ich versuche, nicht passieren zu lassen. Gibt es eine Möglichkeit, das zu tun?

Als Referenz ist das, was alert.html wie folgt aussieht:

<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> 

(Außerdem gibt es einen einfacheren Weg für die Zulassung zu veran Vielleicht eine auch nur programmatisch es zu erhalten, ohne dass der Benutzer aufgefordert? Ich habe seit einer Woche gesucht, und habe nicht gefunden.

+0

Ist dies eine Web App? Wie läuft 'onOpen()'? Aus einer Tabelle? –

Antwort

0

Ich fand diese verwandte issue 677 - Allow end users to provide OAuth credentials in google-apps-script-issues gepostet und basierend auf diesem Thread gibt es Workarounds, die Sie auch versuchen können und eine wurde in GitHub - OAuthService for Google Apps Script veröffentlicht, wobei der Entwickler oAuth eingewickelt in eine Bibliothek fließt, die Sie auch hinzufügen können dein eigenes Skript.

Lösung in diesem SO Post - Google API Authorization when 'Executing the app as me.' in Bezug auf die Autorisierung innerhalb von Google Apps Skript kann auch helfen.

Verwandte Themen