บทความ / หัวข้อ GAS

ทำระบบล็อกอินและสิทธิ์ผู้ใช้ในเว็บแอป Google Apps Script

อัปเดต 5 ตุลาคม 2026

เว็บแอปที่ Deploy แบบ "Anyone" ทุกคนที่มีลิงก์เปิดได้ ถ้ามีข้อมูลสำคัญต้องทำ ระบบล็อกอินของตัวเอง หลักสำคัญคือ อย่าเก็บรหัสผ่านเป็นข้อความตรง ๆ และตรวจสิทธิ์ที่ฝั่งเซิร์ฟเวอร์ทุกครั้ง

ระบบพร้อมใช้ที่เกี่ยวข้อง

เก็บรหัสแบบ hash + salt

function hash(text, salt) {
  const bytes = Utilities.computeDigest(Utilities.DigestAlgorithm.SHA_256, salt + text, Utilities.Charset.UTF_8);
  return Utilities.base64Encode(bytes);
}

ชีต users เก็บ username, salt, password_hash, role (salt สุ่มด้วย Utilities.getUuid() ต่อผู้ใช้)

ล็อกอินและสร้าง token

function login(username, password) {
  const users = SpreadsheetApp.getActive().getSheetByName('users').getDataRange().getValues();
  const u = users.find(r => r[0] === username);
  if (!u || hash(password, u[1]) !== u[2]) throw new Error('ชื่อผู้ใช้หรือรหัสผ่านไม่ถูกต้อง');
  const token = Utilities.getUuid();
  CacheService.getScriptCache().put('sess_' + token, JSON.stringify({ username, role: u[3] }), 6 * 60 * 60);
  return token;   // เก็บไว้ฝั่งเบราว์เซอร์ แล้วแนบมาทุกคำขอ
}

function requireRole(token, roles) {
  const s = CacheService.getScriptCache().get('sess_' + token);
  if (!s) throw new Error('กรุณาเข้าสู่ระบบใหม่');
  const user = JSON.parse(s);
  if (roles && !roles.includes(user.role)) throw new Error('ไม่มีสิทธิ์');
  return user;
}

ทุกฟังก์ชันสำคัญ เช่น deleteBill(token, id) ต้องเรียก requireRole(token, ['admin']) ก่อนเสมอ

PIN สำหรับหน้าร้าน

ระบบ POS มักใช้ PIN 4–6 หลัก ต่อพนักงานแทนรหัสผ่านยาว ๆ เพื่อสลับคนได้เร็ว ควรจำกัดจำนวนครั้งที่กรอกผิดเพื่อกันการเดา

คำถามที่พบบ่อย: ระบบล็อกอินในเว็บแอป Apps Script

ได้เฉพาะบางกรณี เช่น ผู้ใช้อยู่โดเมน Workspace เดียวกันและ Deploy แบบ Execute as user ถ้าเปิดให้บุคคลทั่วไปใช้ มักได้ค่าว่าง จึงควรทำระบบล็อกอินเอง

เก็บใน sessionStorage หรือ localStorage ของหน้าเว็บแอป และส่งไปกับทุกการเรียก google.script.run

ได้ ส่งรหัสยืนยันชั่วคราวทางอีเมลด้วย MailApp เก็บรหัสใน CacheService พร้อมเวลาหมดอายุ

ระบบอื่นที่น่าสนใจ

POS ร้านขายยา
แนะนำ
ดูรายละเอียด
POS ร้านค้าปลีก-ส่ง v1.0.0

POS ร้านขายยา

จ่ายยาถูกคน ถูกล็อต ไม่มียาหมดอายุค้างชั้น · ชื่อสามัญ ประเภทยา เภสัชกรยืนยัน เตือนแพ้ยา ล็อต FEFO ฉลากยา บัญชีขายยาอันตราย · บน Google Sheets ของร้านเอง ไม่มีค่ารายเดือน

฿2,490.00
0
POS ร้านอาหาร (โต๊ะ ครัว QR สั่งอาหาร)
แนะนำ
ดูรายละเอียด
POS ร้านอาหาร & เครื่องดื่ม v2.0.0

POS ร้านอาหาร (โต๊ะ ครัว QR สั่งอาหาร)

ผังโต๊ะสด · ลูกค้าสแกน QR สั่งอาหารที่โต๊ะ · จอครัว · แจ้งเตือนเรียกพนักงาน · ค่าบริการ · เมนูหมดอัตโนมัติ + แจ้งวัตถุดิบหมดทาง LINE/อีเมล · ไม่มีค่ารายเดือน

฿2,990.00
0