ข้ามไปที่เนื้อหาหลัก

ปัญหาที่เกิดจากการใช้งาน Facebook PHP SDK ในการทำ Facebook Login


จากบทความก่อนๆ ที่ผมเคยแนะนำการการใช้งาน Facebook PHP SDK ในการทำ Facebook Login สำหรับการแก้ไขปัญหา Chrome ไม่รองรับ Facebook Javascript SDK ซึ่งสามารถใช้งานได้ปกติ โดยการสับขาหลอกของตัวผมเอง หลายๆ ท่านที่เข้ามาอาจจะลองก๊อปโค้ดไปแปะ แล้วปรากฎว่ามันไม่เห็นจะทำงานได้จริง

เนื่องจากปัญหาที่เกิดขึ้นจาก error นี้

"Error validating verification code. Please make sure your redirect_uri is identical to the one you used in the OAuth dialog request"



ผมก็หาข้อมูลอยู่นานจนพบว่า ข้อห้ามสำคัญที่ก่อให้เกิด error ข้างต้น สรุปได้ดังนี้
  1. พารามิเตอร์ในส่วนของ redirect_uri กับค่าส่งมาจากการขออนุมัติการเข้าถึง ( Authorize Access ) ต้องตรงกัน
  2. คุณไม่สามารถใช้เครื่องหมายพิเศษบน url สำหรับการ redirect ได้ เช่น %, / ฯลฯ รวมไปถึงการทำให้ url ไม่สามารถอ่านค่าพารามิเตอร์ที่ส่งมาได้ ( uri_string ผิดพลาด )
ซึ่งการแก้ไขปัญหาจะแบ่งได้หลายแบบแยกตามกรณี การใส่ redirect_uri ตามนี้
  1. ถ้าคุณตั้งค่า redirect_uri เป็น www.yourwebsite.com โดดๆ ไม่มีอะไรต่อท้าย คือ ทำการเช็คการล็อคอินในหน้าหลักเลย หากเกิดปัญหา ให้เติม / ต่อท้ายไปด้วยเพราะมันจะเกิดปัญหาการส่งค่าพารามิเตอร์ไม่ถึง หรือไม่ถูกต้อง url ที่ได้จะเป็นแบบนี้ redirect_uri=http://www.yourwebsite.com?code=XXXXXXXXXXX (แบบนี้อาจจะผิดได้) ทางที่ดี ควรเปลี่ยนเป็น http://www.yourwebsite.com/?code=xxxxxxxxx
  2. ถ้าหากคุณต้องการทำ Login ไปหน้าใหม่ เช่น www.yourwebsite.com/checklogin , www.yourwebsite.com/checklogn.php , www.yourwebsite.com/index.php?page=checklogin&facebook (แบบนี้ไม่แนะนำ) ในบางกรณีอาจจะต้องเพิ่ม / ต่อท้าย หรือไม่? ต้องเช็ค url ด้วยนะครับ แต่ในกรณีนี้หากต้องการทำแบบนี้ ต้องไปเพิ่ม oauth validation redirect uri ใน app ของคุณด้วยนะครับ ซึ่งจะเพิ่มในหน้า setting > advanced
โปรดจำไว้ว่าค่าต่างๆ ที่เราได้ตั้งไว้ใน Facebook App นั้นสัมพันธ์กับข้อมูลที่จะใช้ บ่อยครั้งเราอาจจะคิดว่าสร้างมาแล้วก็จบกัน ควรกลับไปไล่ดูค่าต่างๆ ด้วยนะครับ เพื่อป้องกันปัญหา Authorize Access ผิดพลาด ที่สำคัญควรตรวจสอบ url ด้วยว่าถูกต้องหรือไม่? เพราะเท่าที่หาข้อมูลมาก็ยังไม่มีสำนักไหน สรุปปัญหาเป็นภาษาไทย ผมเลยอยากทำตรงเก็บไว้เพื่อเตือนความจำตัวเองกับการเสียเวลาอยู่นาน และแชร์ความรู้สำหรับ Facebook Developer มือใหม่นะครับ :D

ที่มา 

ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

การเพิ่ม Font ภาษาไทยอื่นๆ เข้าไปใช้งานใน MPDF

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

การใช้งาน คำสั่ง file_exists() อย่างเข้าใจ

นี่อาจจะไม่เรื่องใหม่อะไรสำหรับ Professional ทั้งหลาย แต่ว่าสำหรับผมที่เข้าใจ และใช้งานอย่างผิดๆ มาตลอด จนบางทีก็เข้าใจว่า เราเขียนผิด หรือ คำสั่งมันใช้งานไม่ได้ วันนี้จะขอมาพูดถึงเรื่องของคำสั่ง PHP ที่ชื่อ file_exists เป็นคำสั่งที่ใช้สำหรับตรวจสอบไฟล์ว่ามีอยู่จริงหรือไม่? ตัวอย่างการใช้งานแบบผิดๆ ที่ผมใช้ก็คือ file_exists('/images/news/helloworld.jpg'); ผลลัพธ์ที่ได้คือ FALSE ถึงแม้ว้าจะมีไฟล์นั้นอยู่จริงก็ตาม ซึ่งในความเป็นจริงแล้ว การใช้งานที่ถูกต้องคือ file_exists($_SERVER['DOCUMENT_ROOT'] . '/images/news/helloworld.jpg'); จากตัวอย่างที่ถูกต้อง ทำให้เข้าใจแบบง่ายๆ ว่าคำสั่ง file_exists นั้นใช้สำหรับเช็ค path ในโฟลเดอร์จริงๆ เท่านั้น ไม่สามารถเช็คจาก URL ได้ อันนี้เป็นเรื่องง่ายๆ ที่ผมเข้าใจผิดมาอยู่นานเลยทีเดียวเลยต้องขอลงบันทึกเตือนตัวเองไว้อีกที :3

มาเข้าใจ และใช้ Datatable ดึงข้อมูลแบบ Server-side ด้วย PHP, MySQL กันเถอะ

มีช่วงหนึงผมเคยนำ datatable มาพัฒนาในงานแต่เกิดปัญหาเนื่องจากมีข้อมูลขนาดใหญ่ ทำให้เกิดการโหลดในครั้งแรกที่โหลดหน้าเพจนั้นๆ เนื่องจากผมใช้ Ajax ในการโหลดข้อมูลทั้งหมดมาในครั้งเดียวด้วยจำนวนข้อมูล 1000 ขึ้น ซึ่งตอนนั้นผมคิดว่าการทำ preload น่าจะช่วยได้ แต่ว่าถ้า user เกิดเผลอไปกด refesh หรือแก้ไขข้อมูลเวลากลับมาที่หน้าข้อมูลก็ต้องโหลดใหม่อีก ทำให้ผมเลิกใช้ datatable ไปเลย เพราะคิดว่ามันคงไม่เหมาะ แต่ในความจริงแล้ว datatable ก็ได้มีสิ่งที่มาแก้ในจุดนั้นได้ ซึ่งเรียกว่า server-side โดยการที่อนุญาตให้เรา query ข้อมูลออกมาก่อนแล้วส่งมาให้ datatable อ่านข้อมูลในจำนวนที่น้อยลง หลักการก็เหมือนๆ กับบทความการทำสร้าง XML จากข้อมูลขนาดใหญ่นั่นแหละครับ แต่มีเงื่อนไขเพียงแต่ว่า ต้อง Filter และส่งข้อมูลออกมาในรูปแบบที่ตรงตามหลักของ datatable เท่านั้น ( บางครั้งเวลาเข้าไปอ่าน Document หรือดู Example จะงงๆ ว่าอะไรเยอะแยะ ) โดยวันนี้จะมาแนะนำการใช้งานแบบง่ายๆ กันเลย :D