我有一個專案,允許用戶發送僅包含一些細節的表單。我曾經使用谷歌的 Session 類,但是當多個帳戶登錄或其他一些我無法修復數周的原因時,這會把一切搞砸。所以我決定嘗試另一種方法并完全切斷谷歌身份驗證,并從我的 LMS 的 POST 資料中獲取用戶驗證并將其設定為 UserProperty。在沒有 Google Auth 的情況下一切正常,我今天進行了大規模測驗。結果,由于我的腳本必須以“我”的身份運行,因此所述用戶是腳本所有者帳戶,這反過來使 UserProperty 成為所有用戶的 ScriptProperty 型別,并且他們開始覆寫彼此的用戶詳細資訊。
例如,第二個用戶從他們的 LMS 打開 WebApp 覆寫第一個用戶的用戶詳細資訊,因為第一個用戶的詳細資訊被第二個用戶覆寫,所有提交似乎都是由第二個用戶發送的。下面的代碼;
function doPost(e) {
var postContents = e.postData.contents.split("&");
var postSplit = postContents[16].split("=");
var activeUserEmail = postSplit[1].replace("@", "@");
userProperties.setProperty('activeUserEmail', activeUserEmail);
if (activeUserEmail[2] == "s" || activeUserEmail[2] == ".") {
console.log("Redirecting to Student: " activeUserEmail);
return HtmlService.createTemplateFromFile('student_form')
.evaluate()
.addMetaTag('viewport', 'width=device-width, initial-scale=1')
.setSandboxMode(HtmlService.SandboxMode.IFRAME)
.setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL);
}
此函式由 html 頁面上的用戶通過 google.script.run 使用 successhandler 呼叫,并在對電子表格和 Drive 進行更多處理后傳回頁面。
function getData() {
var activeUserEmail = userProperties.getProperty('activeUserEmail');
console.log("getData User: " activeUserEmail);
try {
if (activeUserEmail != "") {
var userResults = teachersSheet.filter(function (row) { return row[0] == activeUserEmail; });
} else {
var userResults = "No User Email"
}
var userDepartment = userResults[0][2];
if (userDepartment == "Admin") {
var data = questionsSheet.getDisplayValues().filter(function (row) { return row[1] != "" && row[0] != "ID"; });
}
else {
var data = questionsSheet.getDisplayValues().filter(function (row) { return row[3] == userDepartment && row[9] == "FALSE" && row[1] != ""; });
};
var data = [userResults, data];
console.log(data);
return data;
} catch (e) {
console.log(e);
}
}
代碼可能有點亂,但希望足夠了。
我不知道如何將持久的用戶詳細資訊保存在不會被第二個腳本運行程式覆寫的變數或屬性中。有任何想法嗎?
uj5u.com熱心網友回復:
狀態可以通過存盤一個唯一id的
- 用戶屬性和
- 客戶端 Javascript 變數
const id = Utilities.getUuid()
userProperties.setProperty(String(id), activeUserEmail);
該student_formHTML也需要evaluate與該D id。的id,一旦在客戶端應與每個請求的服務器發送。
google.script.run.getData(id)
function getData(id) {
var activeUserEmail = userProperties.getProperty(String(id));
console.log("getData User: " activeUserEmail);
//stuff
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/361440.html
標籤:javascript 验证 谷歌应用程序脚本
上一篇:我需要在我的腳本中更改什么才能將A列添加到B列,每次我點擊按鈕添加它們時都在B列中回傳答案?
下一篇:舊的谷歌表格按鈕不起作用
