【发布时间】:2021-05-20 08:57:58
【问题描述】:
我是谷歌应用脚本的初学者。我正在创建一个常驻支付系统,用户可以在登录时更改密码。所以现在,我已经完成了更改密码的 html 部分,但我不知道如何进行编码以更改密码。我附上了一些图片和我的代码来更好地解释自己。非常感谢你们。
Code.gs 代码
var url = "https://docs.google.com/spreadsheets/d/1bM8l6JefFsPrlJnTWf56wOhnuSjdIwg3hMbY1tN1Zp8/edit#gid=1775459006";
var streetSheetName = "JALAN SANGGUL 4";
function doGet(e) {
var streetSheetName = "JALAN SANGGUL 4"; // Added
PropertiesService.getScriptProperties().setProperty("streetSheetName", streetSheetName); // Added
return HtmlService.createHtmlOutputFromFile('WebAppLogin');
}
function checkLogin(username, password) {
var found_record = '';
var name = '';
var ss = SpreadsheetApp.openByUrl(url);
var webAppSheet = ss.getSheetByName("USERNAMES");
var getLastRow = webAppSheet.getLastRow();
for(var i = 2; i <= getLastRow; i++) {
if(webAppSheet.getRange(i, 1).getValue().toUpperCase() == username.toUpperCase() && webAppSheet.getRange(i, 7).getValue() == password) {
found_record = 'TRUE';
name = webAppSheet.getRange(i, 4).getValue().toUpperCase() + " " + webAppSheet.getRange(i, 5).getValue().toUpperCase();
streetSheetName = webAppSheet.getRange(i, 3).getValue().toUpperCase();
} else if (username.toUpperCase() == 'ADMIN' && password == 'ADMINPASSWORD') {
found_record = 'TRUE';
name = webAppSheet.getRange(i, 4).getValue().toUpperCase() + " " + webAppSheet.getRange(i, 5).getValue().toUpperCase();
streetSheetName = webAppSheet.getRange(i, 3).getValue().toUpperCase();
}
}
PropertiesService.getScriptProperties().setProperty("streetSheetName", streetSheetName); // Added
if(found_record == '') {
found_record = 'FALSE';
}
return [found_record, username,name];
}
function GetRecords(username,filter) {
var filteredDataRangeValues = GetUsernameAssociatedProperties(username);
var resultArray = GetPaymentRecords(filteredDataRangeValues,filter);
return resultArray;
}
function GetUsernameAssociatedProperties(username) {
var filteredDataRangeValues = '';
var ss = SpreadsheetApp.openByUrl(url);
var displaySheet = ss.getSheetByName("USERNAMES");
var dataRangeValues = displaySheet.getDataRange().getValues();
if (username.toUpperCase() == 'ADMIN') {
dataRangeValues.shift();
filteredDataRangeValues = dataRangeValues;
} else {
filteredDataRangeValues = dataRangeValues.filter(row => row[0].toUpperCase() == username.toUpperCase());
}
return filteredDataRangeValues;
}
function GetPaymentRecords(userProperties,filter) {
var streetSheetName = PropertiesService.getScriptProperties().getProperty("streetSheetName"); // Added
var transpose = m => m[0].map((_, i) => m.map(x => x[i]));
var resultArray = [];
var ss = SpreadsheetApp.openByUrl(url);
var displaySheet = ss.getSheetByName(streetSheetName);
var addressValues = displaySheet.getRange("B:C").getValues();
var paidMonthValues = displaySheet.getRange(1, 7, displaySheet.getLastRow(), displaySheet.getLastColumn() - 6).getValues();
//Logger.log(addressValues);
//Logger.log(transpose(paidMonthValues));
userProperties.forEach((v, i) => {
var userHouseNumber = v[1];
var userStreet = v[2];
var column = addressValues.reduce(function callbackFn(accumulator, currentValue, index, array) {
if (currentValue[0] == userHouseNumber && currentValue[1] == userStreet) {
return index
} else {
return accumulator
}
}, '');
//Logger.log(column);
Logger.log(filter)
Logger.log(paidMonthValues);
if(filter=="None"){
var result = transpose(paidMonthValues).map(function callbackFn(element, index, array) {
return [element[0], userHouseNumber, userStreet, element[column] || '']
});
}else{
var result = transpose(paidMonthValues).map(function callbackFn(element, index, array) {
if(element[0].includes(filter))return [element[0], userHouseNumber, userStreet, element[column] || '']
});
}
resultArray = resultArray.concat(result);
//Logger.log(resultArray);
})
//Remove null elements
resultArray = resultArray.filter(element=>{
Logger.log(element!=null)
return element != null;
});
return resultArray;
}
WebAppLogin.html 的代码
function changePassword(){
var result = confirm("Want to Change Password?");
if (result) {
google.script.run
.withSuccessHandler(updateButton)
.getEmail()
alert('Password changed');
}
【问题讨论】:
-
我没有浏览你所有的代码,因为它太长了,但我猜你想通过客户端函数
changePassword来处理这个。如果是这种情况,您应该在changePassword中调用一个服务器端函数来更改工作表中的密码值。在您的代码中,您调用的函数getEmail在代码中的任何位置都不存在,而作为成功处理程序,您调用的是updateButton,我也没有在任何地方看到它。你能澄清一下吗?另外,我建议您提供一个最小的重现示例,以便专注于您的实际问题。 -
@Iamblichus Bro 非常感谢您的回复。我真的需要你的帮助兄弟。我在我的帖子中更新了一些东西兄弟。希望它能让你更好地理解。我想让用户在登录后更改密码兄弟。但我不太确定如何进行编码。希望你能帮助我。 用户名:JJACKSON 密码:PASSWORD1您可以使用此凭据登录网络应用程序兄弟。
-
当我看到您共享的示例电子表格时,您的示例电子表格似乎与您图像的示例电子表格不同。例如,工作表“USERNAMES”的“A”列不同。在您共享的电子表格中,“A”列是
4。这个怎么样?还有,Javascript 端.withSuccessHandler(updateButton)的函数updateButton是什么? -
@Tanaike Bro 和你昨天看到的一样,我错误地把它改成了 4 对不起。
-
感谢您的回复。根据您的回复, 1. 工作表“USERNAMES”的“A”列是“USERNAME”。我的理解正确吗? 2. 关于
.withSuccessHandler(updateButton),我仍然无法理解。我为我糟糕的英语水平道歉。我可以问你.withSuccessHandler(updateButton)目标的细节吗?例如,alert('Password changed')显示在函数updateButton?
标签: javascript html google-apps-script