You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Apps Script登录按钮异常及成员姓名获取技术问询

问题解答

1. 空表单直接登录成功的问题

原因

前端未对NRIC和邮箱做空值校验就调用后端接口;同时后端checkLogin函数没判断输入是否为空,当输入为空时,会匹配到表格第一行(表头)的空值(若表头未填写NRIC和邮箱),导致返回成功状态。

修复方案

前端修改(LoginUser函数)

在调用后端前添加空值校验:

function LoginUser()
{
  var username = document.getElementById("username").value;
  var nric = document.getElementById("nric").value;
  var email = document.getElementById("email").value;
  
  // 新增空值校验
  if (!nric.trim() || !email.trim()) {
    document.getElementById("errorMessage").innerHTML = "请填写NRIC和邮箱!";
    return;
  }

  google.script.run.withSuccessHandler(function(output) 
  {
    if(output.status == 'TRUE')
    {
       document.getElementById("displayusername").innerHTML = output.name;
       document.getElementById("page1_id1").className = "page1_class1-off";
       document.getElementById("page4_id1").className = "page4_id1";    
    }
    else if(output.status == 'FALSE')
    {
      document.getElementById("errorMessage").innerHTML = "请使用正确的邮箱和NRIC(含横杠)登录。若无法登录,请联系ERA更新信息:era@era.org.my";     
    }    
  }).checkLogin(nric,email);
}

后端修改(checkLogin函数)

增加空值判断,同时跳过表头行(循环从第2行开始):

function checkLogin(nric,email) {
  // 新增空值判断
  if (!nric.trim() || !email.trim()) {
    return {status: 'FALSE', name: ''};
  }
  
  var url = 'https://docs.google.com/spreadsheets/d/1dKcn__IcRnDoXf72HnsVN7L2POSNu8KzKJKpS4jmNrk/edit#gid=0';
  var ss= SpreadsheetApp.openByUrl(url);
  var webAppSheet = ss.getSheetByName("DATA");
  var getLastRow =  webAppSheet.getLastRow();
  
  // 跳过表头,从第2行开始循环
  for(var i = 2; i <= getLastRow; i++)
  {
    var sheetNric = String(webAppSheet.getRange(i, 2).getValue()).toUpperCase();
    var sheetEmail = String(webAppSheet.getRange(i, 3).getValue()).toUpperCase();
    if(sheetNric == nric.toUpperCase() && sheetEmail == email.toUpperCase())
    {
      // 返回成功状态及对应姓名
      return {status: 'TRUE', name: webAppSheet.getRange(i, 1).getValue()};
    }    
  }
  
  return {status: 'FALSE', name: ''};
}

2. toUpperCase在Apps Script是否失效?

没有失效,但要注意两个细节:

  • 如果单元格值不是字符串类型(比如数字、空值),直接调用toUpperCase()会报错,需先转成字符串:String(cell.getValue()).toUpperCase()
  • 空单元格返回的是空字符串,调用toUpperCase()没问题,但会匹配空输入(这也是问题1的诱因之一)

上面的修改代码已经处理了类型转换,避免报错。

3. 显示表格中对应成员的姓名

实现逻辑

修改后端checkLogin函数,找到匹配行后,同时返回成功状态和该行第一列的姓名;前端在成功回调中使用后端返回的姓名,替代用户输入的内容。

具体修改

已包含在上述代码中:

  • 后端找到匹配行时,返回对象{status: 'TRUE', name: 对应姓名}
  • 前端回调中替换为:document.getElementById("displayusername").innerHTML = output.name;

这样登录成功后就会显示表格中存储的真实姓名,而非用户输入的内容。

内容的提问来源于stack exchange,提问作者dswong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 08:55:18