リクエストを行っているユーザーとして、Google Apps Script によって作成された JSON リクエストを処理しようとしています。しばらく考えた後、私はこれが機能しないことに気付きました。なぜなら、サービング スクリプトは彼を呼び出すユーザーとして実行することを承認される必要があるため、呼び出しスクリプトはいくつかの承認情報を追加する必要がありますが、そうではありません。その情報を追加する方法がわかりません(それは実際に私の質問です:どの情報をhttpリクエストに追加し、どこから取得するか)。
しかし、それにもかかわらず、ブラウザー内からそのサーバーを呼び出すと、ブラウザー (Google アカウントにログインしている) が http 要求で正しい情報を送信して、承認されていることを証明するため、機能します。
この質問は、How to use Google Apps Script ContentService as a REST serverという質問に何らかの形で関連していますが、そこで与えられた答えはまさに私が望んでいないものです: 呼び出された JSON-Server は自分のアカウントでは実行されませんが、アカウントの下で実行されます呼び出し元のユーザーの、そのユーザーのリソース (scriptdb、ドライブなど) を使用します。問題は、Google アカウントから実行されたあるスクリプトから別のスクリプトにその情報を提供して、この別のスクリプトがそのアカウント内で実行できるようにする方法です。ガスライブラリを使用するとその問題が解決することはわかっていますが、JSONクライアント/サーバーとして使用したいと考えています(主に依存関係を切り離すため)。いくつかのコードを追加する (Stack Overflow-spirit を実行し続けるため)、私のクライアント:
var scriptUrl="https://script.google.com/macros/s/paperlapapp1231231/exec";
function callIt (nm, args) {
var a=[nm];
for (x in args) {
a.push(args[x]);
}
return Utilities.jsonParse(UrlFetchApp.fetch(scriptUrl+"?args="
+encodeURIComponent(Utilities.jsonStringify(a))).getContentText());
}
function testFunction (p1, p2, p3) { // this is the proxy
return callIt ("testFunction", arguments);
}
// Testroutine
function callTest() {
var r=testFunction (9, "XXXlala", {"dudu":1, "dada":"xxx"});
Logger.log ("r="+Utilities.jsonStringify(r));
}
私のサーバー:
function doGet(request) {
var ret=null;
try {
Logger.log ("I got called with "+JSON.stringify(request));
var args=JSON.parse(decodeURIComponent (request.parameters.args));
ret=ContentService.createTextOutput(
JSON.stringify(this[args.shift()].apply (this, args)))
.setMimeType(ContentService.MimeType.JSON);
}
catch (e) {
ret=ContentService.createTextOutput(JSON.stringify(e))
.setMimeType(ContentService.MimeType.JSON);
}
return ret;
}
function testFunction (p1, p2, p3) { // this is the implementation
var s="testing called p1="+p1+", p2="+p2+", p3="+p3;
Logger.log (s);
return {testingResult:s};
}
編集:
解決策を考え出しましたが、Chrome 拡張機能と中間プロキシ サーバーが必要です。https://bitbucket.org/pbhd/gas-rest-server-as-calling-userでコードを参照してください