|
PHP Facebook Login (SDK 5) ระบบล็อกอิน PHP/MySQL กับ Facebook (Update : 2018) |
PHP Facebook Login (SDK 5) ระบบล็อกอิน PHP/MySQL กับ Facebook (Update : 2018) ปัจจุบันปี 2017 ทาง Facebook ได้พัฒนา API สำหรับการ Login ด้วย PHP มาถึง SDK 5 แล้ว และได้มีการยกเลิกเวอร์ชั่นเก่าๆ ไปเช่น SDK 2 ซึ่งทำให้หลายเว็บไซต์ที่ไม่ได้มีการอัพเดดจะไม่สามารถใช้งานได้ เป็นการยังคับให้นักพัฒนาโปรแกรม PHP มีการอัพเดดเวอร์ชั่นของ PHP ไปในตัวด้วย เพราะว่า SDK 4 หรือ 5 เป็นต้นไปจะรองรับบน PHP 5.4 ขึ้นไปเท่านั้น ถ้าใช้เวอรชั่นต่ำกว่านี้อาจจะต้องไปใช้ SDK ของ JavaScript แทน
ใน SDK 5 นี้ยังไม่ได้แตกต่างอะไรกับ SDK 4 มากนัก และเช่นเดิมสามารถติดตั้ง SDK ได้จาก Composor หรือจะดาวน์โหลดไฟล์โดยตรงเลยก็ได้ ส่วนวิธีการเขียนแบบเบื้องต้น เช้นการดึง ID, Name , Email ก็ไม่ได้แตกตต่างกับเวอร์ชั่นก่อนๆ
PHP and Facebook API Login (SDK 5)
ก่อนอื่นจะต้องรู้ก่อนว่า SDK 5 จะรองรับ PHP 5.4 เป็นต้นไป และเปิดใช้ mbstring ส่วน Composer(มีหรือไม่ก็ได้)
Step 1 : สร้าง App ID บน Facebook API
ขั้นแรกสุดจะต้องสสมัคร Facebook Developer โดยสามารถสมัครได้ที่ https://developers.facebook.com/
ก่อนจะเปิดใช้งาน Facebook Login จะต้องสร้าง App ที่จะรองรับการทำงานซะก่อน โดยไปที่

ลือกเมนู Add a New App

ตั้งชื่อ App หรือชื่อเว็บ ซึ่งอาจจะหมายถึงชื่อกรุ๊ปที่จะใช้งาน

ในหน้า Dashboard ให้ Copy ตัว App ID และ App Secret ไปใช้งาน

แสดง App ID และ App Secret

App Review ตั้งค่าการ Login ให้เป็น Yes

ในส่วนของ Settings ให้เลือก Add Platform

เลือกเป็น Website

จากนั้นใส่ URL ให้ถูกต้อง (ถ้าใส่ไม่ถูกต้องาจจะไม่ทำงาน)
Step 2 : ดาวน์โหลด Facebook for PHP SDK 5 มาใช้งาน
ดาน์โหลด SDK 5
https://developers.facebook.com/docs/php/gettingstarted
ให้ดาวน์โหลด SDK 5 ที่ใช้สำหรับ PHP (สามารถติดตั้งได้จาก Composer)
composer.json
{
"require" : {
"facebook/graph-sdk" : "~5.0"
}
}
หรือจะดาวน์โหลดท้ายบทความ

หลังจากที่ดาวน์โหลดแล้วไฟล์ที่เราจะใช้จะอยู่ที่ src/Facebook เราจะใช้แค่นี้เท่านั้น

ให้ Copy ไฟล์ทั้งหมดไปไว้ในโฟเดอร์ facebook-sdk-v5 และเก็บโฟเดอร์ไว้ใน root ของเว็บ

ตัวอย่างการอัพโหลดไปไว้ที่ Server ซึ่งเวลาตอนที่เรียกใช้จะได้เป็น
require_once __DIR__ . '/facebook-sdk-v5/autoload.php';
Step 3 : การเรียกใช้งาน และ ทดสอบการ Login ด้วย Facebook API และ PHP
ในการทำรับบ Login ด้วย PHP จะต้องสร้างไฟล์แรกเป็นไฟล์ที่ใช้สำหรับการสร้าง Link เพื่อตรวจสอบไปยัง Facebook และไฟล์ที่ทำหน้าที่รับค่าหลังจากตรวจสอบเสร็จเรียบร้อยแล้ว (login call back)
- login.php (สร้าง Link สำหรับตรวจสอบ Facebook Login)
- login-callback.php (ไฟล์เมื่อ Login ผ่านแล้วก็จะส่งค่ามายังหน้านี้)
login.php (PHP)
<?php
session_start();
ini_set('display_errors', 1);
require_once __DIR__ . '/facebook-sdk-v5/autoload.php';
use Facebook\FacebookSession;
use Facebook\FacebookRequest;
use Facebook\GraphUser;
use Facebook\FacebookRedirectLoginHelper;
$fb = new Facebook\Facebook([
'app_id' => '190103684833793',
'app_secret' => '1c12639e99b03149f2a29834a2ac471e',
'default_graph_version' => 'v2.5',
]);
$helper = $fb->getRedirectLoginHelper();
$permissions = ['email', 'user_likes']; // optional
$loginUrl = $helper->getLoginUrl('https://www.thaicreate.com/login-callback.php', $permissions);
echo '<a href="' . $loginUrl . '">Log in with Facebook!</a>';
?>
ไฟล์ login.php จะสร้างลิ้งค์สำหรับการล็อกอินและลิ้งค์ call back หลังจากที่ล็อกอินเรียบร้อยแล้ว

ลิ้งค์เพื่อล็อกอิน

ผู้ใช้เลือก Allow สิทธิ์การเข้าถึงข้อมูล
login-callback.php (PHP)
<?php
session_start();
ini_set('display_errors', 1);
require_once __DIR__ . '/facebook-sdk-v5/autoload.php';
use Facebook\FacebookSession;
use Facebook\FacebookRequest;
use Facebook\GraphUser;
use Facebook\FacebookRedirectLoginHelper;
$fb = new Facebook\Facebook([
'app_id' => '190103684833793',
'app_secret' => '1c12639e99b03149f2a29834a2ac471e',
'default_graph_version' => 'v2.5',
]);
$helper = $fb->getRedirectLoginHelper();
try {
$accessToken = $helper->getAccessToken();
} catch(Facebook\Exceptions\FacebookResponseException $e) {
// When Graph returns an error
echo 'Graph returned an error: ' . $e->getMessage();
exit;
} catch(Facebook\Exceptions\FacebookSDKException $e) {
// When validation fails or other local issues
echo 'Facebook SDK returned an error: ' . $e->getMessage();
exit;
}
if (isset($accessToken)) {
// Logged in!
$_SESSION['facebook_access_token'] = (string) $accessToken;
// Now you can redirect to another page and use the
// access token from $_SESSION['facebook_access_token']
$response = $fb->get('/me?fields=id,name,gender,email,link', $accessToken);
$user = $response->getGraphUser();
echo'<pre>';
print_r($user);
echo'</pre>';
//echo 'ID: ' . $user['id'];
//echo 'Name: ' . $user['name'];
//echo 'Gener: ' . $user['gener'];
//echo 'Email: ' . $user['email'];
//echo 'Link: ' . $user['link'];
}
?>
ไฟล์ login-callback.php จะทำงานเมื่อล็อกอินเรียบร้อยแล้ว

ตัวอย่างการดึงข้อมูลเช่น Facebook ID หรือ Name , Email มาใช้งาน
และถ้าล็อกอินสำเร็จ จะได้ค่า $accessToken มาใช้งาน และจะเห็นว่ามีการจัดเก็บลงใน Session
$_SESSION['facebook_access_token'] = (string) $accessToken;
แสดงว่าในหน้าอื่นๆ เราจะสามารถเรียกใช้ token นี้ที่จะดึงข้อมูลของ User มาใช้งานได้ เช่น
<?php
session_start();
ini_set('display_errors', 1);
require_once __DIR__ . '/facebook-sdk-v5/autoload.php';
use Facebook\FacebookSession;
use Facebook\FacebookRequest;
use Facebook\GraphUser;
use Facebook\FacebookRedirectLoginHelper;
$fb = new Facebook\Facebook([
'app_id' => '190103684833793',
'app_secret' => '1c12639e99b03149f2a29834a2ac471e',
'default_graph_version' => 'v2.5',
]);
if (isset($_SESSION['facebook_access_token'])) {
$response = $fb->get('/me?fields=id,name,gender,email,link', $_SESSION['facebook_access_token']);
$user = $response->getGraphUser();
echo'<pre>';
print_r($user);
echo'</pre>';
//echo 'ID: ' . $user['id'];
//echo 'Name: ' . $user['name'];
//echo 'Gener: ' . $user['gener'];
//echo 'Email: ' . $user['email'];
//echo 'Link: ' . $user['link'];
}
?>
ในกรณีที่เรียกใช้หน้าอื่นๆ
หรือเราสามารถจัดการด่วยการจัดเก็บมันลงใน MySQL แล้วสร้าง Session ขึ้นมาจัดการเองก็ได้ เช่น
Table : tb_facebook
CREATE TABLE IF NOT EXISTS `tb_facebook` (
`ID` int(6) NOT NULL AUTO_INCREMENT,
`FACEBOOK_ID` varchar(50) NOT NULL,
`NAME` varchar(150) NOT NULL,
`EMAIL` varchar(250) NOT NULL,
`PICTURE` varchar(250) NOT NULL,
`LINK` varchar(250) NOT NULL,
`CREATE_DATE` datetime NOT NULL,
PRIMARY KEY (`ID`),
UNIQUE KEY `ID` (`FACEBOOK_ID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
โครงสร้างตารางที่มช้จัดเก็บ

โครงสร้างของตาราง
login-callback.php (PHP) : ล็อกอินสำเร็จและมีการจัดเก็บลงใน MySql
<?php
session_start();
ini_set('display_errors', 1);
require_once __DIR__ . '/facebook-sdk-v5/autoload.php';
use Facebook\FacebookSession;
use Facebook\FacebookRequest;
use Facebook\GraphUser;
use Facebook\FacebookRedirectLoginHelper;
$fb = new Facebook\Facebook([
'app_id' => '190103684833793',
'app_secret' => '1c12639e99b03149f2a29834a2ac471e',
'default_graph_version' => 'v2.5',
]);
$helper = $fb->getRedirectLoginHelper();
try {
$accessToken = $helper->getAccessToken();
} catch(Facebook\Exceptions\FacebookResponseException $e) {
// When Graph returns an error
echo 'Graph returned an error: ' . $e->getMessage();
exit;
} catch(Facebook\Exceptions\FacebookSDKException $e) {
// When validation fails or other local issues
echo 'Facebook SDK returned an error: ' . $e->getMessage();
exit;
}
if (isset($accessToken)) {
// Logged in!
$_SESSION['facebook_access_token'] = (string) $accessToken;
// Now you can redirect to another page and use the
// access token from $_SESSION['facebook_access_token']
$response = $fb->get('/me?fields=id,name,gender,email,link', $accessToken);
$user = $response->getGraphUser();
echo'<pre>';
print_r($user);
echo'</pre>';
//echo 'ID: ' . $user['id'];
//echo 'Name: ' . $user['name'];
//echo 'Gener: ' . $user['gener'];
//echo 'Email: ' . $user['email'];
//echo 'Link: ' . $user['link'];
$objConnect = mysql_connect("localhost","root","root") or die(mysql_error());
$objDB = mysql_select_db("mydb");
mysql_query("SET NAMES UTF8");
// Check Exists ID
$strSQL = "SELECT * FROM tb_facebook WHERE FACEBOOK_ID = '".$user['id']."' ";
$objQuery = mysql_query($strSQL);
$objResult = mysql_fetch_array($objQuery);
if($objResult)
{
$_SESSION["strFacebookID"] = $user['id'];
header("location:page1.php");
exit();
}
else
{
// Create New ID
$strPicture = "https://graph.facebook.com/".$user['id']."/picture?type=large";
$strSQL =" INSERT INTO tb_facebook (FACEBOOK_ID ,NAME,EMAIL,PICTURE,LINK,CREATE_DATE)
VALUES
('".trim($user['id'])."',
'".trim($user['name'])."',
'".trim($user['email'])."',
'".trim($strPicture)."',
'".trim($user['link'])."',
'".trim(date("Y-m-d H:i:s"))."')";
$objQuery = mysql_query($strSQL);
$_SESSION["strFacebookID"] = $user['id'];
header("location:page1.php");
exit();
}
mysql_close();
}
?>
page1.php (PHP) : ดึงค่า Session มาใช้งาน แล้วเลือก Facebook ID ที่ล็อกอินอยู่ในขณะนั้น
<?php
session_start();
$objConnect = mysql_connect("localhost","root","root") or die(mysql_error());
$objDB = mysql_select_db("mydb");
mysql_query("SET NAMES UTF8");
// Check Exists ID
$strSQL = "SELECT * FROM tb_facebook WHERE FACEBOOK_ID = '".$_SESSION["strFacebookID"]."' ";
$objQuery = mysql_query($strSQL);
$objResult = mysql_fetch_array($objQuery);
if($objResult)
{
echo "Welcome to my Account<br><br>";
echo "Facebook ID = ".$objResult["FACEBOOK_ID"];
echo "<br><a href='".$objResult["LINK"]."' target='_blank'>
<img src='".$objResult["PICTURE"]."' border='0'></a><br><br>";
echo $objResult["NAME"];
}
echo "<br><br><br><a href='logout.php'>Logout</a>";
mysql_close();
?>
logout.php (PHP) : ล้าง Session
<?php
session_start();
session_destroy();
header("location:login.php");
?>
จาก Code จะเห็นว่ากรณีที่มีข้อมูลอยู่แล้วให้ไปหน้า page1.php ในทันที แต่ถ้าเป็นข้อมูลใหม่ให้ทำการ Insert ลงใน Table ก่อน
ทดสอบการทำงาน

เมื่อ Login สำเร็จจะมายัง page1.php และดึงข้อมูลออกมาแสดง

มีการจัดเก็บลงใน MySQL Table
Download Code
Error นี้เกิดจากยังไมไ่ด้ session_start()
Fatal error: Uncaught exception 'Facebook\Exceptions\FacebookSDKException' with message 'Sessions are not active. Please make sure session_start() is at the top of your script.'
|
|
|
|
 |
|
|
|
By : |
TC Admin
|
|
Article : |
บทความเป็นการเขียนโดยสมาชิก หากมีปัญหาเรื่องลิขสิทธิ์ กรุณาแจ้งให้ทาง webmaster ทราบด้วยครับ |
|
Score Rating : |
   |
|
Create Date : |
2017-04-11 |
|
Download : |
No files |
|
|
|
|