การขอสิทธิ์เพิ่มเติม

เมื่อขอสิทธิ์จากผู้ใช้เพื่อเข้าถึงข้อมูลผู้ใช้หรือทรัพยากรอื่นๆ คุณจะขอขอบเขตทั้งหมดล่วงหน้าได้ในคำขอเริ่มต้น หรือขอขอบเขตคำขอเท่านั้นก็ได้ตามที่ต้องการ โดยใช้การให้สิทธิ์ที่เพิ่มขึ้น เมื่อใช้การให้สิทธิ์เพิ่มเติม ในตอนแรกแอปจะขอเฉพาะขอบเขตที่จำเป็นในการเริ่มต้นแอป จากนั้นจะขอขอบเขตเพิ่มเติมเนื่องจากต้องการสิทธิ์ใหม่ในบริบทที่ระบุสาเหตุของคำขอไปยังผู้ใช้

ตัวอย่างเช่น สมมติว่าแอปของคุณอนุญาตให้ผู้ใช้บันทึกเพลย์ลิสต์เพลง ลงใน Google ไดรฟ์ โดยแอปของคุณสามารถขอข้อมูลพื้นฐานของผู้ใช้เมื่อลงชื่อเข้าใช้ และเมื่อผู้ใช้พร้อมที่จะบันทึกเพลย์ลิสต์แรก ให้ขอเฉพาะสิทธิ์ใน Google ไดรฟ์เท่านั้น

ใช้เทคนิคนี้หากสงสัยว่าผู้ใช้ไม่ได้ลงชื่อเข้าใช้เนื่องจากหน้าจอคำยินยอมมีมากเกินไป หรือสับสนว่าทำไมระบบจึงขอสิทธิ์บางอย่างจากผู้ใช้ วิธีการต่อไปนี้มีไว้สำหรับเว็บ และได้มาจากวิธีการสำหรับการเพิ่มปุ่มลงชื่อเข้าใช้ฝั่งไคลเอ็นต์: การสร้างปุ่ม Google 2.0 Sign-In อ่านข้อมูลเพิ่มเติมเกี่ยวกับการให้สิทธิ์เพิ่มเติมสำหรับเว็บได้ในเอกสารประกอบเกี่ยวกับ OAuth 2.0

การขอขอบเขตเพิ่มเติม

เมื่อลงชื่อเข้าใช้ แอปจะขอขอบเขต "ฐาน" ซึ่งประกอบด้วยขอบเขตการลงชื่อเข้าใช้ profile และขอบเขตเริ่มต้นอื่นๆ ที่แอปต้องใช้ในการดำเนินการ จากนั้น เมื่อผู้ใช้ต้องการดำเนินการที่ต้องใช้ขอบเขตเพิ่มเติม แอปจะขอขอบเขตเพิ่มเติมเหล่านั้น และผู้ใช้ให้สิทธิ์เฉพาะขอบเขตใหม่จากหน้าจอความยินยอมเท่านั้น

ขั้นตอนที่ 1: ขอขอบเขตฐาน

ขอขอบเขตพื้นฐาน profile เมื่อเริ่มต้น Google Sign-In ขั้นตอนนี้ รวมอยู่ใน การสร้างปุ่ม Google 2.0 Sign-In

auth2 = gapi.auth2.init({
    client_id: 'CLIENT_ID.apps.googleusercontent.com',
    cookiepolicy: 'single_host_origin', /** Default value **/
    scope: 'profile' });                /** Base scope **/

ขั้นตอนที่ 2: ขอขอบเขตเพิ่มเติม

หากต้องการขอบเขตเพิ่มเติม ให้ขอขอบเขตดังกล่าวโดยการสร้างตัวเลือกเครื่องมือสร้างด้วยขอบเขตที่คุณต้องการเพิ่มแล้วเรียกใช้ user.grant({scope: [OPTIONS BUILDER]}).then(successFunction, failFunction); ดังนี้

const option = new gapi.auth2.SigninOptionsBuilder();
option.setScope('email https://www.googleapis.com/auth/drive');

googleUser = auth2.currentUser.get();
googleUser.grant(options).then(
    function(success){
      console.log(JSON.stringify({message: "success", value: success}));
    },
    function(fail){
      alert(JSON.stringify({message: "fail", value: fail}));
    });