Google Apps Script ต้องมีการให้สิทธิ์จากผู้ใช้เพื่อเข้าถึงข้อมูลส่วนตัวจาก บริการของ Google ในตัวหรือ บริการขั้นสูงของ Google
วิธีการทำงานของการให้สิทธิ์สำหรับบริการของ Google
เมื่อสคริปต์ต้องเข้าถึงบริการของ Google สคริปต์จะทำตามกระบวนการทั่วไปนี้
- การตรวจหา: Apps Script จะสแกนสคริปต์เพื่อระบุบริการที่สคริปต์ใช้ (เช่น
SpreadsheetAppหรือGmailApp) - การกำหนดขอบเขต: Apps Script จะระบุชุดขอบเขต OAuth ที่จำเป็นต่อการเรียกใช้สคริปต์ตามการสแกน
- การตรวจสอบการให้สิทธิ์: เมื่อเรียกใช้สคริปต์ ระบบจะตรวจสอบว่าผู้ใช้ได้ให้สิทธิ์ขอบเขตเหล่านั้นแล้วหรือไม่
- ข้อความแจ้งผู้ใช้: หากไม่มีการให้สิทธิ์ กล่องโต้ตอบจะปรากฏขึ้นเพื่อขอให้ผู้ใช้ให้สิทธิ์
- การดำเนินการ: หลังจากได้รับสิทธิ์แล้ว สคริปต์จะเข้าถึงข้อมูลที่ขอของผู้ใช้รายดังกล่าวได้
สิทธิ์และประเภทของสคริปต์
ข้อมูลประจำตัวของผู้ใช้ที่สคริปต์ทำงานด้วย (และข้อมูลที่สคริปต์เข้าถึงได้) จะ แตกต่างกันไปตามสถานการณ์ที่สคริปต์ทำงาน ดังที่แสดงใน ตารางต่อไปนี้
| ประเภทสคริปต์ | สคริปต์ทำงานในนาม... |
|---|---|
| แบบสแตนด์อโลน ส่วนเสริมของ Google Workspace หรือ ที่เชื่อมโยงกับ Google เอกสาร, Google ชีต, Google สไลด์ หรือ Google ฟอร์ม | ผู้ใช้ที่แป้นพิมพ์ |
| ฟังก์ชันที่กำหนดเองในสเปรดชีต | ผู้ใช้ที่ไม่ระบุชื่อ อย่างไรก็ตาม ขีดจำกัดโควต้า จะนับรวมกับผู้ใช้ที่ใช้แป้นพิมพ์ |
| เว็บแอปหรือ แกดเจ็ต Google Sites | ผู้ใช้ที่แป้นพิมพ์หรือเจ้าของสคริปต์ ขึ้นอยู่กับ ตัวเลือกที่เลือก เมื่อทําให้แอปใช้งานได้ |
| ทริกเกอร์ที่ติดตั้งได้ | ผู้ใช้ที่สร้างทริกเกอร์ |
ให้สิทธิ์เข้าถึง
Apps Script จะกำหนดขอบเขตการให้สิทธิ์ (เช่น สิทธิ์เข้าถึงไฟล์ชีตหรือ Gmail) โดยอัตโนมัติตามการสแกนโค้ด โค้ด ที่แสดงความคิดเห็นยังคงสร้างคำขอการให้สิทธิ์ได้ หากสคริปต์ ต้องมีการให้สิทธิ์ กล่องโต้ตอบการให้สิทธิ์จะปรากฏขึ้นเมื่อเรียกใช้
สคริปต์ที่คุณเคยให้สิทธิ์ไว้ก่อนหน้านี้จะขอสิทธิ์เพิ่มเติมด้วย หากการเปลี่ยนแปลงโค้ดเพิ่มบริการใหม่ สคริปต์อาจไม่ต้องขอสิทธิ์ หากคุณเข้าถึงสคริปต์ในรูปแบบเว็บแอปที่ทำงานภายใต้ ข้อมูลประจำตัวผู้ใช้ของเจ้าของสคริปต์
เพิกถอนสิทธิ์การเข้าถึง
หากต้องการเพิกถอนสิทธิ์เข้าถึงข้อมูลของสคริปต์ ให้ทำตามขั้นตอนต่อไปนี้
- ไปที่ส่วนความปลอดภัยของบัญชี Google
- ในส่วนการเชื่อมต่อกับแอปและบริการของบุคคลที่สาม ให้คลิกดูการเชื่อมต่อทั้งหมด
- เลือกสคริปต์หรือแอปที่ต้องการเพิกถอนสิทธิ์เข้าถึง
- คลิกลบการเชื่อมต่อทั้งหมดที่มีอยู่กับ APP_NAME จากนั้น คลิกยืนยัน
จำกัดขอบเขตไว้ที่เอกสารปัจจุบัน
หากคุณกำลังสร้างส่วนเสริมหรือสคริปต์อื่นๆ ที่ใช้บริการสเปรดชีต บริการเอกสาร บริการสไลด์ หรือ บริการฟอร์ม คุณสามารถบังคับให้กล่องโต้ตอบการให้สิทธิ์ ขอสิทธิ์เข้าถึงเฉพาะไฟล์ที่ใช้ส่วนเสริมหรือสคริปต์ แทนที่จะเป็นสเปรดชีต เอกสาร หรือแบบฟอร์มทั้งหมดของผู้ใช้ โดยให้ใส่คำอธิบายประกอบ JSDoc ต่อไปนี้ในความคิดเห็นระดับไฟล์
/**
* @OnlyCurrentDoc
*/
คำอธิบายประกอบที่ตรงกันข้าม @NotOnlyCurrentDoc จะพร้อมใช้งานหากสคริปต์ของคุณ
มีไลบรารีที่ประกาศ
@OnlyCurrentDoc แต่สคริปต์หลักต้องมีสิทธิ์เข้าถึงมากกว่า
ไฟล์ปัจจุบัน
วงจรการให้สิทธิ์สำหรับส่วนเสริม
ส่วนเสริมสำหรับชีต เอกสาร สไลด์ และฟอร์ม
โดยทั่วไปจะใช้รูปแบบการให้สิทธิ์เดียวกันกับสคริปต์ที่เชื่อมโยงกับเอกสาร อย่างไรก็ตาม ในบาง
กรณี ฟังก์ชัน onOpen(e) และ onEdit(e) จะทำงานใน
โหมดไม่มีการให้สิทธิ์ ซึ่งทำให้เกิดความซับซ้อนเพิ่มเติม ดูข้อมูลเพิ่มเติมได้ที่คู่มือวงจรการให้สิทธิ์ของส่วนเสริม
ขีดจำกัดผู้ใช้แอปพลิเคชัน OAuth
แอปพลิเคชันที่ใช้ OAuth เพื่อเข้าถึงข้อมูลผู้ใช้ Google รวมถึงโปรเจ็กต์ Apps Script จะอยู่ภายใต้ขีดจํากัดการให้สิทธิ์ ดูรายละเอียดได้ที่ ขีดจำกัดผู้ใช้แอปพลิเคชัน OAuth
ลักษณะการทำงานของการตรวจสอบสิทธิ์อีกครั้งด้วย Apps Script
Apps Script ไม่บังคับใช้ความถี่ในการตรวจสอบสิทธิ์อีกครั้งที่กำหนดค่าไว้ในการตั้งค่าบริการของ Google Cloud เนื่องจาก Apps Script สามารถทำงานโดยอัตโนมัติโดยใช้ทริกเกอร์ ซึ่งทำงาน โดยไม่ต้องมีการโต้ตอบจากผู้ใช้โดยตรง การดำเนินการอัตโนมัติเหล่านี้จะไม่ทริกเกอร์ ข้อความแจ้งให้ตรวจสอบสิทธิ์อีกครั้ง แอปพลิเคชัน Apps Script จะไม่ ขอให้คุณตรวจสอบสิทธิ์อีกครั้งโดยอัตโนมัติหลังจากระยะเวลาที่ระบุ (เช่น 12 ชั่วโมง)
ตั้งค่าขอบเขตที่ชัดเจนในไฟล์ Manifest
Apps Script จะกำหนดขอบเขตที่จำเป็นโดยอัตโนมัติด้วยการสแกน
โค้ดเพื่อหาการเรียกฟังก์ชัน หากต้องการควบคุมเพิ่มเติม คุณสามารถตั้งค่าขอบเขตอย่างชัดเจนในไฟล์ Manifest ของโปรเจ็กต์ (appsscript.json) เราขอแนะนำให้ทำเช่นนี้กับสคริปต์ที่เผยแพร่แล้วเพื่อให้มั่นใจว่าคุณใช้สิทธิ์ขั้นต่ำที่จำเป็น
โปรดดูวิธีการที่หัวข้อตั้งค่าขอบเขตที่ชัดเจน
การแก้ปัญหา
- ข้อผิดพลาด"ต้องมีการให้สิทธิ์" เมื่อเรียกใช้ทริกเกอร์: ผู้ใช้ที่สร้างทริกเกอร์ต้องให้สิทธิ์ทริกเกอร์ หากเพิ่มโค้ดที่ต้องใช้สิทธิ์ใหม่ คุณต้องเรียกใช้ฟังก์ชันในตัวแก้ไขสคริปต์ด้วยตนเอง 1 ครั้งเพื่อทริกเกอร์กล่องโต้ตอบการให้สิทธิ์
- ขอบเขตไม่อัปเดต: หากคุณอัปเดตรหัสแล้ว แต่กล่องโต้ตอบการให้สิทธิ์
ไม่แสดงการเปลี่ยนแปลง ให้ลองบันทึกโปรเจ็กต์และรีเฟรช
เอดิเตอร์ หากคุณใช้ขอบเขตที่ชัดเจนในไฟล์ Manifest โปรดตรวจสอบว่าคุณได้
เพิ่มขอบเขตใหม่ลงในอาร์เรย์
oauthScopesแล้ว - "แอปนี้ถูกบล็อก" หรือคำเตือนของแอปที่ยังไม่ได้รับการยืนยัน: ปัญหานี้เกิดขึ้นหากสคริปต์ใช้ขอบเขตที่ละเอียดอ่อนหรือขอบเขตที่จำกัด และยังไม่ได้รับการยืนยันจาก Google ดูการยืนยันไคลเอ็นต์ OAuth