Как скрыть серверные сценарии в 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