ทำระบบล็อกอินและสิทธิ์ผู้ใช้ในเว็บแอป 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 ร้านขายยา
จ่ายยาถูกคน ถูกล็อต ไม่มียาหมดอายุค้างชั้น · ชื่อสามัญ ประเภทยา เภสัชกรยืนยัน เตือนแพ้ยา ล็อต FEFO ฉลากยา บัญชีขายยาอันตราย · บน Google Sheets ของร้านเอง ไม่มีค่ารายเดือน
POS ร้านอาหาร (โต๊ะ ครัว QR สั่งอาหาร)
ผังโต๊ะสด · ลูกค้าสแกน QR สั่งอาหารที่โต๊ะ · จอครัว · แจ้งเตือนเรียกพนักงาน · ค่าบริการ · เมนูหมดอัตโนมัติ + แจ้งวัตถุดิบหมดทาง LINE/อีเมล · ไม่มีค่ารายเดือน