การจัดการสิทธิ์การอนุญาตในการเข้าสู่ระบบด้วย Facebook สำหรับเว็บ

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

เราได้อธิบายเรื่องสิทธิ์การอนุญาตอย่างละเอียดไว้แล้วในคู่มือสิทธิ์การอนุญาตของเรา อย่างไรก็ตาม ยังมีข้อควรจำเล็กๆ น้อยๆ เมื่อใช้สิทธิ์การอนุญาตและกล่องการเข้าสู่ระบบ ดังนี้:

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

การเพิ่มสิทธิ์การอนุญาต

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

เช่น สมมติว่าคุณมีปุ่มเข้าสู่ระบบพร้อมสิทธิ์การอนุญาตต่อไปนี้:

<fb:login-button scope="public_profile" onlogin="checkLoginState();">
</fb:login-button>

และหากคุณทำเครื่องหมาย /me/permissions กับสิทธิ์การอนุญาตที่ได้รับหลังจากผู้ใช้ยอมรับแล้ว ระบบจะแสดงผลดังนี้:

{"data":
  [
    {
      "permission":"public_profile",
      "status":"granted"
    }
  ]
}

หากคุณต้องการเพิ่มสิทธิ์การอนุญาต email ในภายหลัง คุณก็สามารถเปิดใหม่ได้ด้วยฟังก์ชัน FB.login() ดังนี้:

FB.login(function(response) {
   console.log(response);
}, {scope: 'email'});

(ต้องเรียกฟังก์ชันนี้จากตัวจัดการเหตุการณ์ของปุ่ม มิฉะนั้นตัวบล็อกป๊อปอัพของเบราว์เซอร์อาจบล็อกฟังก์ชันนี้ได้)

โปรดทราบว่าระบบจะขอสิทธิ์การอนุญาตใหม่เท่านั้น หากคุณยอมรับสิทธิ์การอนุญาตใหม่ การทำเครื่องหมาย /me/permissions จะส่งผลดังนี้:

{"data":
  [
    {
      "permission":"public_profile",
      "status":"granted"
    },
    {
      "permission":"email",
      "status":"granted"
    }
  ]
}

โปรดทราบว่ามีการเพิ่มสิทธิ์การอนุญาต email ใหม่ลงในรายการของสิทธิ์การอนุญาตที่ได้รับแล้ว

การขอสิทธิ์การอนุญาตที่ถูกปฏิเสธอีกครั้ง

การเข้าสู่ระบบด้วย Facebook ช่วยให้ผู้ใช้สามารถปฏิเสธการแชร์สิทธิ์การอนุญาตบางอย่างกับแอพของคุณได้ หากผู้ใช้บางคนเลือกปฏิเสธ user_likes (การกดถูกใจ) การทำเครื่องหมาย /me/permissions กับสิทธิ์การอนุญาตที่ได้รับจะส่งผลดังนี้:

{
  "data":
    [
      {
        "permission":"public_profile",
        "status":"granted"
      },
      {
        "permission":"user_likes",
        "status":"declined"
      }
    ]
}

โปรดทราบว่าผู้ใช้ได้ปฏิเสธ user_likes แทนที่จะให้สิทธิ์

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

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

คุณจะดำเนินการได้โดยการเพิ่มสถานะ auth_type: rerequest ไปยังการเรียก FB.login() ของคุณ:

FB.login(
  function(response) {
    console.log(response);
  },
  {
    scope: 'user_likes',
    auth_type: 'rerequest'
  }
);

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