Как скрыть серверные сценарии в Google App Maker

У меня есть клиентские и серверные сценарии, серверные сценарии вызываются клиентскими сценариями, а клиентские сценарии вызываются из элементов пользовательского интерфейса. Поэтому мне нужно скрыть методы скриптов сервера, чтобы сделать мои данные более безопасными. Как я могу это сделать? В документации говорится, что мы можем скрыть это, добавив подчеркивание к имени метода, это называется служебной функцией, но если мы сделаем это, они могут быть вызваны только из других серверных сценариев вместо клиентских сценариев. В моем случае они должны вызываться из методов клиентского скрипта.

2 ответа

Вы можете сделать вспомогательную функцию на стороне сервера, которая будет вызываться кодом на стороне клиента и вызывать частные функции на стороне сервера.

Брюс Макферсон объясняет это в разделе Использование обещаний со скриптом Google Apps.

Код на стороне клиента:

/**
 * @namespace Provoke
 * promise management for async calls
 */

var Provoke =(function (ns) {

  /**
  * run something asynchronously
  * @param {string} namespace the namespace (null for global)
  * @param {string} method the method or function to call
  * @param {...} the args
  * @return {Promise} a promise
  */
  ns.run = function (namespace,method) {

    // the args to the server function
    var runArgs = Array.prototype.slice.call(arguments).slice(2);
    console.log(runArgs);
    if (arguments.length<2) {
      throw new Error ('need at least a namespace and method');
    }

    // this will return a promise
    return new Promise(function ( resolve , reject ) {

      google.script.run

      .withFailureHandler (function(err) {
        reject (err);
      })

      .withSuccessHandler (function(result) {
        resolve (result);
      })

      .exposeRun (namespace,method,runArgs); 
    });


  };


  return ns;

})(Provoke || {});

Код на стороне сервера:

/**
* used to expose memebers of a namespace
* @param {string} namespace name
* @param {method} method name
*/
function exposeRun (namespace, method , argArray ) {
  var func = (namespace ? this[namespace][method] : this[method])
  if (argArray && argArray.length) {
    return func.apply(this,argArray);
  }
  else {
    return func();
  }
}

Способ использования вышеперечисленного на стороне клиента

Provoke.run ( 'Server', 'getData_' , 100)
.then (function (result) {
   '//do something with the result
},
function (err) {
  //do something with the error
});

Используйте символ подчеркивания _ в конце имени функции сделать его приватным:

function iAmPrivate_() {
  // safe to execute code
}

function iAmPublic() {
 // I am not safe, do security checks before execute
}

Прочитайте больше:

https://developers.google.com/apps-script/guides/html/communication

Другие вопросы по тегам