Nowadays the web users are not interested in filling a big form for registration on the website. The short registration process helps to get more subscribers to your website. Login with Facebook is a quick and powerful way to integrate registration and login system on the website. Facebook is the most popular social network and most of the users have a Facebook account. Facebook Login allows users to sign in to your website using their Facebook account credentials without sign up on your website.
PHP SDK allows accessing the Facebook API from the web application. You can easily implement the Login with Facebook account using Facebook SDK for PHP. This tutorial will show how you can implement user login and registration system with Facebook using PHP and store the user profile data into the MySQL database. Our example Facebook Login script uses Facebook PHP SDK v5 with Facebook Graph API to build Facebook Login system with PHP and MySQL.
To get started with the latest version of Facebook SDK v5.x, make sure your system meets the following requirements.
Before you begin to integrate Login with Facebook using PHP, take a look the files structure.
facebook_login_php/ ├── config.php ├── index.php ├── logout.php ├── User.class.php ├── facebook-php-graph-sdk/ ├── images/ │ ├── fb-login-btn.png └── css/ └── style.css
To access Facebook API you need to create a Facebook App and specify the App ID & App Secret at the time of calling the Facebook API. Follow the step-by-step guide to create Facebook App and generate App ID & Secret in the Facebook Developers Dashboard.
Go to the Settings » Basic page, note the App ID and App Secret. This App ID and App secret allow you to access the Facebook APIs.
Note that: The App ID and App secret need to be specified in the script at the time of Facebook API call. Also, the Valid OAuth Redirect URIs must be matched with the Redirect URL that specified in the script.
To retrieve the user’s Facebook timeline link and gender, you need to submit a request for user_link and user_gender permissions.
user_link
and user_gender
permissions and submit the required information.
Once the review process is completed and approved by the Facebook, you will be able to get the user profile link and gender from the Facebook Graph API.
Do you want a detailed guide on Facebook App creation? Go through this guide to create Facebook Developer App and get the App ID & App secret.
To store the user’s profile information from Facebook, a table needs to be created in the database. The following SQL creates a users
table with some basic fields in the MySQL database to hold the Facebook account information.
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`oauth_provider` enum('facebook','google','twitter','') COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
`oauth_uid` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
`first_name` varchar(25) COLLATE utf8_unicode_ci NOT NULL,
`last_name` varchar(25) COLLATE utf8_unicode_ci NOT NULL,
`email` varchar(25) COLLATE utf8_unicode_ci NOT NULL,
`gender` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL,
`picture` varchar(200) COLLATE utf8_unicode_ci NOT NULL,
`link` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`created` datetime NOT NULL,
`modified` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
The facebook-php-graph-sdk/ directory contains the latest version (v5) of Facebook SDK for PHP. You don’t need to download it separately, all the required files of Facebook PHP SDK v5 are included in our Facebook Login PHP source code.
The User class handles the database related operations (connect, insert, and update) using PHP and MySQL. It helps to connect to the database and insert/update Facebook account data in the users table.
<?php
/*
* User Class
* This class is used for database related (connect, insert, and update) operations
* @author CodexWorld.com
* @url http://www.codexworld.com
* @license http://www.codexworld.com/license
*/
class User {
private $dbHost = DB_HOST;
private $dbUsername = DB_USERNAME;
private $dbPassword = DB_PASSWORD;
private $dbName = DB_NAME;
private $userTbl = DB_USER_TBL;
function __construct(){
if(!isset($this->db)){
// Connect to the database
$conn = new mysqli($this->dbHost, $this->dbUsername, $this->dbPassword, $this->dbName);
if($conn->connect_error){
die("Failed to connect with MySQL: " . $conn->connect_error);
}else{
$this->db = $conn;
}
}
}
function checkUser($data = array()){
if(!empty($data)){
// Check whether the user already exists in the database
$checkQuery = "SELECT * FROM ".$this->userTbl." WHERE oauth_provider = '".$data['oauth_provider']."' AND oauth_uid = '".$data['oauth_uid']."'";
$checkResult = $this->db->query($checkQuery);
// Add modified time to the data array
if(!array_key_exists('modified',$data)){
$data['modified'] = date("Y-m-d H:i:s");
}
if($checkResult->num_rows > 0){
// Prepare column and value format
$colvalSet = '';
$i = 0;
foreach($data as $key=>$val){
$pre = ($i > 0)?', ':'';
$colvalSet .= $pre.$key."='".$this->db->real_escape_string($val)."'";
$i++;
}
$whereSql = " WHERE oauth_provider = '".$data['oauth_provider']."' AND oauth_uid = '".$data['oauth_uid']."'";
// Update user data in the database
$query = "UPDATE ".$this->userTbl." SET ".$colvalSet.$whereSql;
$update = $this->db->query($query);
}else{
// Add created time to the data array
if(!array_key_exists('created',$data)){
$data['created'] = date("Y-m-d H:i:s");
}
// Prepare column and value format
$columns = $values = '';
$i = 0;
foreach($data as $key=>$val){
$pre = ($i > 0)?', ':'';
$columns .= $pre.$key;
$values .= $pre."'".$this->db->real_escape_string($val)."'";
$i++;
}
// Insert user data in the database
$query = "INSERT INTO ".$this->userTbl." (".$columns.") VALUES (".$values.")";
$insert = $this->db->query($query);
}
// Get user data from the database
$result = $this->db->query($checkQuery);
$userData = $result->fetch_assoc();
}
// Return user data
return !empty($userData)?$userData:false;
}
}
The database settings and Facebook API configuration constant variables are defined in the config.php
file.
Database Constants:
Facebook API Constants:
Call Facebook API:
<?php /* * Basic Site Settings and API Configuration */ // Database configuration define('DB_HOST', 'MySQL_Database_Host'); define('DB_USERNAME', 'MySQL_Database_Username'); define('DB_PASSWORD', 'MySQL_Database_Password'); define('DB_NAME', 'MySQL_Database_Name'); define('DB_USER_TBL', 'users'); // Facebook API configuration define('FB_APP_ID', 'Insert_Facebook_App_ID'); define('FB_APP_SECRET', 'Insert_Facebook_App_Secret'); define('FB_REDIRECT_URL', 'Callback_URL'); // Start session if(!session_id()){ session_start(); } // Include the autoloader provided in the SDK require_once __DIR__ . '/facebook-php-graph-sdk/autoload.php'; // Include required libraries use Facebook\Facebook; use Facebook\Exceptions\FacebookResponseException; use Facebook\Exceptions\FacebookSDKException; // Call Facebook API $fb = new Facebook(array( 'app_id' => FB_APP_ID, 'app_secret' => FB_APP_SECRET, 'default_graph_version' => 'v3.2', )); // Get redirect login helper $helper = $fb->getRedirectLoginHelper(); // Try to get access token try { if(isset($_SESSION['facebook_access_token'])){ $accessToken = $_SESSION['facebook_access_token']; }else{ $accessToken = $helper->getAccessToken(); } } catch(FacebookResponseException $e) { echo 'Graph returned an error: ' . $e->getMessage(); exit; } catch(FacebookSDKException $e) { echo 'Facebook SDK returned an error: ' . $e->getMessage(); exit; }
Note that: You’ll find the App ID and App Secret on your Facebook App settings page.
In this file, the Facebook API authentication process is handled using PHP.
<?php
// Include configuration file
require_once 'config.php';
// Include User class
require_once 'User.class.php';
if(isset($accessToken)){
if(isset($_SESSION['facebook_access_token'])){
$fb->setDefaultAccessToken($_SESSION['facebook_access_token']);
}else{
// Put short-lived access token in session
$_SESSION['facebook_access_token'] = (string) $accessToken;
// OAuth 2.0 client handler helps to manage access tokens
$oAuth2Client = $fb->getOAuth2Client();
// Exchanges a short-lived access token for a long-lived one
$longLivedAccessToken = $oAuth2Client->getLongLivedAccessToken($_SESSION['facebook_access_token']);
$_SESSION['facebook_access_token'] = (string) $longLivedAccessToken;
// Set default access token to be used in script
$fb->setDefaultAccessToken($_SESSION['facebook_access_token']);
}
// Redirect the user back to the same page if url has "code" parameter in query string
if(isset($_GET['code'])){
header('Location: ./');
}
// Getting user's profile info from Facebook
try {
$graphResponse = $fb->get('/me?fields=name,first_name,last_name,email,link,gender,picture');
$fbUser = $graphResponse->getGraphUser();
} catch(FacebookResponseException $e) {
echo 'Graph returned an error: ' . $e->getMessage();
session_destroy();
// Redirect user back to app login page
header("Location: ./");
exit;
} catch(FacebookSDKException $e) {
echo 'Facebook SDK returned an error: ' . $e->getMessage();
exit;
}
// Initialize User class
$user = new User();
// Getting user's profile data
$fbUserData = array();
$fbUserData['oauth_uid'] = !empty($fbUser['id'])?$fbUser['id']:'';
$fbUserData['first_name'] = !empty($fbUser['first_name'])?$fbUser['first_name']:'';
$fbUserData['last_name'] = !empty($fbUser['last_name'])?$fbUser['last_name']:'';
$fbUserData['email'] = !empty($fbUser['email'])?$fbUser['email']:'';
$fbUserData['gender'] = !empty($fbUser['gender'])?$fbUser['gender']:'';
$fbUserData['picture'] = !empty($fbUser['picture']['url'])?$fbUser['picture']['url']:'';
$fbUserData['link'] = !empty($fbUser['link'])?$fbUser['link']:'';
// Insert or update user data to the database
$fbUserData['oauth_provider'] = 'facebook';
$userData = $user->checkUser($fbUserData);
// Storing user data in the session
$_SESSION['userData'] = $userData;
// Get logout url
$logoutURL = $helper->getLogoutUrl($accessToken, FB_REDIRECT_URL.'logout.php');
// Render Facebook profile data
if(!empty($userData)){
$output = '<h2>Facebook Profile Details</h2>';
$output .= '<div class="ac-data">';
$output .= '<img src="'.$userData['picture'].'"/>';
$output .= '<p><b>Facebook ID:</b> '.$userData['oauth_uid'].'</p>';
$output .= '<p><b>Name:</b> '.$userData['first_name'].' '.$userData['last_name'].'</p>';
$output .= '<p><b>Email:</b> '.$userData['email'].'</p>';
$output .= '<p><b>Gender:</b> '.$userData['gender'].'</p>';
$output .= '<p><b>Logged in with:</b> Facebook</p>';
$output .= '<p><b>Profile Link:</b> <a href="'.$userData['link'].'" target="_blank">Click to visit Facebook page</a></p>';
$output .= '<p><b>Logout from <a href="'.$logoutURL.'">Facebook</a></p>';
$output .= '</div>';
}else{
$output = '<h3 style="color:red">Some problem occurred, please try again.</h3>';
}
}else{
// Get login url
$permissions = ['email']; // Optional permissions
$loginURL = $helper->getLoginUrl(FB_REDIRECT_URL, $permissions);
// Render Facebook login button
$output = '<a href="'.htmlspecialchars($loginURL).'"><img src="images/fb-login-btn.png"></a>';
}
?>
<!DOCTYPE html>
<html lang="en-US">
<head>
<title>Login with Facebook using PHP by CodexWorld</title>
<meta charset="utf-8">
</head>
<body>
<div class="container">
<div class="fb-box">
<!-- Display login button / Facebook profile information -->
<?php echo $output; ?>
</div>
</div>
</body>
</html>
If the user wishes to log out from their Facebook account, the logout.php file is loaded.
<?php // Include configuration file require_once 'config.php'; // Remove access token from session unset($_SESSION['facebook_access_token']); // Remove user data from session unset($_SESSION['userData']); // Redirect to the homepage header("Location:index.php"); ?>
Login with Facebook in CodeIgniter
In this tutorial, we’ve tried to make Facebook Login implementation quicker and easier. The example code integrates Facebook Login with the Facebook SDK for PHP. You don’t need to add the SDK library files separately, our source code contains all the required files with the SDK v5 for PHP. You only need to specify some minimal settings for adding login system with Facebook to your website using PHP. To make the Facebook login more user-friendly, you can use JavaScript SDK to integrate Facebook Login without page refresh using JavaScript.
Do you want to get implementation help, or enhance the functionality of this script? Click here to Submit Service Request
Your code helped me a lot. Thanks for that . I want know how can we implement as API call. Can you please help me..
I searched a lot , but i didnt unable to get it
Is the config.php suppose to be included in every file in the site or just the authentication files, login, logout files?
Hello,
where can i find the image and css files?
Download the source code.
Thanks for this tutorial,
I want to insert the contact number in the database, how to do that?
Thanks again codexworld…
Must facebook approve the permission befor i can integrate login? If yes, how long does it take
No, App Review doesn’t require for the Default Public Profile Fields. This permission is approved by default in Facebook App, so it doesn’t need to be approved before Facebook Login integration.
Thanks #codexworld !, I want to ask if you have another way to allow me to pay for your wonderful source code? I want to pay for it, but I’m a student, I don’t have credit card, much less the Paypal account….
P.S. Sorry for my bad english, I’m still learning it..
It works on only localhost, but gives me error when i tried using it online error (URL Blocked: This redirect failed because the redirect URI is not whitelisted in the app’s Client OAuth Settings. Make sure Client and Web OAuth Login are on and add all your app domains as Valid OAuth Redirect URIs.)
This issue occurred because of the Facebook App settings. Please check whether you have specified the Redirect URL in Facebook App settings.
Excellent!!! thank you very much for this great contribution … just a detail … I do not want to save in the database … of rest everything perfect … I do not know if you can help me … in advance thanks
Hi,
I have integrated Facebook and google account in website by following your tutorial. Thanks .
I am having some doubts to clarify, What would I need to do to display my some other page instead of the profile information page? I tried several ways but nothing works.
Thanks man, waiting for your reply.
Hello, i just purchased your code. it working perfect. saved my time. Thank you so much. Only problem i am facing is the profile image of facebook is very small in size. like 50 * 50 px. How can i fix this. atleast little bit better resolution..
Follow this guide to get large size profile picture in Facebook PHP SDK – https://www.codexworld.com/how-to/get-large-size-profile-picture-in-facebook-php-sdk/
Is it working with the new FB api that use https?
Yes, it will work.
Would this need to be modified slightly in order to handle multiple Facebook apps on the same server?
1. Copy db table users to users2, users3, etc. ?
2. change $_SESSION[‘facebook_access_token’] -> $_SESSION[‘facebook_access_token2’], $_SESSION[‘facebook_access_token3’]
Thanks!
actly everything went fine , except for one thing, In facebook login the image quality is much less, and I tried to resize using html paramters , but didn’t worked as I expected. Is there any way to get high quality profile pictures
Yes, you can get large size profile picture from Facebook, see this tutorial – https://www.codexworld.com/how-to/get-large-size-profile-picture-in-facebook-php-sdk/
Hello, any ideas if i want to implement two social login (Facebook & Twitter) ? How to combine two php code in one file .php? Is it using function? Thankyou.
Great Coding codeworld….. i want to pop up facebook login.how to do? please help
See this tutorial to integrate Facebook login with popup – https://www.codexworld.com/login-with-facebook-using-javascript-sdk/
Thanks codexworld. Petmalu. easy to used! Nice Coding.
Helllo
How to rename the main folder ‘login with facebook using php’ to another name ? kindly advice
Regards
hello,
i am getting error like this….
Can’t Load URL: The domain of this URL isn’t included in the app’s domains. To be able to load this URL, add all domains and subdomains of your app to the App Domains field in your app settings.
Please help me to fix the error
You need to specify the website’s domain in App Domains field. See this step-by-step guide to create and configure the Facebook App – https://www.codexworld.com/create-facebook-app-id-app-secret/
I don’t understand this well, I read the official developer site, search Google and found this. Do I need to download Facebook SDK first
No, you don’t need to download it separately. Download our source code, it contains all the required files and Facebook SDK.
great work thanx. How can i get a bigger version of facebook profile picture. It shows only 50*50 px version and when i try to get the bigger picture manually using it shows error: Invalid URL signature
See this guide to get large size profile picture in Facebook PHP SDK – https://www.codexworld.com/how-to/get-large-size-profile-picture-in-facebook-php-sdk/
Hi,
I have FB and Google login working together on the same page, but the FB logout breaks when Fb and Google logins are both on the same page.
Any ideas?
just awesome……….
Awesome…..integrated fb and google both. Thanks.
Hi, Thanks for writing this tutorial this is very helpful.
I want to know how can i run it over PHP 5.2 ?
hi, how to handle facebook login when user denied access to email permission? do I have to re-request the permission? or make form for user to insert permission?
how to download facebook sdk library
Our source code contains all the required files including Facebook PHP SDK, download the source code ZIP.
HI There
Great script!! Searched for a while for a good implementation.
What would the script be for checking if the session is set? I need to add this to the page of every page to ensure the user is logged in.
I have a website for users with multiple pages and every page must check if the user is logged in else, redirect to index.
Thanks
Thank you #codexworld for this tutorial and complete script, its work in my website. I need one more thing to done, can you please tell me how can i show a message when a user logged in and logged out using this script?