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
This is the best facebook login using php ever. It’s very easy to set up.
How to change the session time? It lasts only 20 minutes.
@Barret
You can increase the PHP session time as per your needs using the following code.
hi.. thanks for excellent script. just 1 problem here. When i click logout link, the page navigated to the right page – index.php. But it seems like did not killed the session. Because when i clicked Login image once again, it brought me direct to “facebook profile details” screen.
am i missing something here?
FYI – i use this script at my localhost (laptop).
thanks bro.
I think you have removed an important file from your download… in a comment you mention ACCOUNT.PHP , which is not in the pack. I’m a beginner but to me it looks like there is something missing.
I also noticed that the variable “$return_url” is not in use in any of th files in the pack.
Could you fix that please? HEEEELP!!!
@Fahed
The latest version of our script does not require the account.php page and $return_url variable. We’ve already updated our code but miss the $return_url variable. Thanks for your comment, we’ve updated our code.
thank u sir .i implemented successfully in localhost but after hosting it in server .after log in facebook data of user is not displaying
@Akshay
You need to add the server domain into the Facebook App Domains and modify the Site URL with your server URL.
Thanks for the tutorials
Hi, I’m Ari, from Brazil! Great work! It works very well. How to change the expiration time, or to using cookies? It very quickly auto loggs off!
i want to use it on my website i see your code but after that how can i use it on my website?
Can you please help me to do this?
i am very beignner in php
@Kiran
You can easily integrate FB login in your website. Just Download the full script and read our tutorial. If you are still need help, then let us know.
I have got the above tutorial working. I want to get the user access token for further api calls. How can I get the user access token from above code and then extend it for 60 days ?
Thanks for tutorial only i need how to get profile image from Facebook?
@Goran
Profile picture fetching is included in our latest script. Download our latest script from the above download link.
Hi Bro, thanks for the great tutorial, works like a charm!
Hello, thanks for your comment Codexworld ! where is the subscribe button anyway,
hi i have some problem how can i make register, login and logout in codeignbter by using media social ?
will you hear my problem now ?
1. my web let say it SIMPLE CRUD but the user can login waht they want (Facebook, Twitter, Google + )
so they log in then input same products, how can i make every user can login what they want and also save their input products !”
will big thanks if you create tutorial like that cuase everyone lookingfor it
Hi,
I done the the tutorials what you have did is running, But instead of localhost i need to use the IP address for my server to redirect. How can i use the IP address of server instead of localhost.
@Vignesh
Go to the FB apps page and click on the Settings links from the left side menu bar. Under the Website section, change the Site URL with your server IP address.
hi how can i applicated this to codiegnter ?
@Freddy
We will publish Login with Facebook in CodeIgniter tutorial soon. Please subscribe your email with us for getting this tutorial in your mail box.
This is a great tutorial. Really simple to get running on your own domain in a matter of minutes. Thanks very much for the info. I’ve since modified to include other permissions on facebook, and integrated with a members own section on a client website. Brilliant stuff.
I have seen the code. It is working fine. But I am getting an issue, the table in the database is not being filed with the logged in user information.
Please help me.
Thanka
Thank you sir.. Its great and simple code for fb login, working perfectly for me.
So far works great except that it registers nothing in the database… are you sure it is really working example?? all the other login tutorials work great except this one =(
Hi Antonio,
This script is well tested and it is working fine. Please check your database configuration into
__construct()
function at theincludes/functions.php
file@Deepak @shanmugam @JQ @Ajit
We are extremely sorry for that. We have resolved this issue and updated the code. Please download the updated code from the Download link.
Thanks for notify us on this issue.
Hello Sir,
I have read your blog on facebook login using php. It’s an awesome blog and contains useful information. Thank you for your blog.
Sir actually when i implement that blog i have facing a problem that only facebook ID is showing to me and no other information is showing. I have followed all your each and every step carefully but didn’t get any solution of my problem. Also my facebook app is live and have permission of accessing information from facebook user.
Sir kindly help me to get out from this solution.
Thanks in Advance
Hi. shangmugam and I have the same problem. I have an app that has live permission to access email and public_profile
I have checked in my database also. But no values in Email, name column. I am new to Php.
I used above code. but except facebook id everything gives null value only.
Hi! I’m having problem with permissions. I’m able to do the login thing but the request only gives my facebook id. Names, email, etc. are blank. What seems to be the problem here? Thanks!
Hi JQ,
Are you follow our Facebook apps creation steps? If not, then please follow our Facebook apps creation steps at the beginning of our tutorial. If you need more help please let us know.
Sir i want to know value of gender , email ,lastname,first_name coming from which page , because in “base_facebook.php” only one value we are returning that is “return $user_info[‘id’];” but not returning all value.
According to me problem coming from here,,
thanx sir to give me your valuable time
Hello sir , as you told for some changes in account.php i have done but same problem (error) occurring and bottom of the page one exception is coming “Some problem occurred, please try again.”
This error will come when
$user_data
is empty. Are you modify$user_data
variable value with$user_profile
intoindex.php
? (as per mentioned earlier) If yes, then logout from your account and login again.Hi sir
i am getting error in index.php on line no 12
Error is ” Notice: Undefined index: first_name in C:\wamp\www\facebook_login_with_php\index.php on line 12″,
i have change line no 12 code ,As you mentioned in previous comment ,i have removed line 12 from code and write $user_data = $user_profile instead of that line,,but after changing this code i got another error “This webpage has a redirect loop
ERR_TOO_MANY_REDIRECTS”.
please sir give me some solution i am waiting for your reply
thank you in advance
This is happening because you have used this system without database. You need to do some modifications including the previous one.
Open the
account.php
file and make the following changes.1. At line no.3 change
$_SESSION['userdata']['oauth_uid']
to$_SESSION['userdata']['id']
.2. Under the Facebook Profile Details display section change all
$_SESSION['userdata']['fname']
to$_SESSION['userdata']['first_name']
and$_SESSION['userdata']['lname']
to$_SESSION['userdata']['last_name']
.Please check and let us know if you need any other help.
I need extra addition to this code. I want to feed 2 more details in to the database which will be user input taken at the time of form submission.
Hi , it’s a great tutorial but it seems you have made it with database, is it possible to create without database like the below video.
I have found a video, check this and please let me know if it can be work.
Thanks Abhi.
You can easily create it without any database with our script. Please follow the below steps.
1. Open the
index.php
file and go to the line no.12.2. Remove the code from line no.12 to 13 and insert this code
$user_data = $user_profile
.3. Now you can get the user profile details from
$_SESSION['userdata']
.Please let us know if you need any further help.
if i wan´t to get users birthday? what should i do?
sorry for the bad english
how to send mail from localhost using wamp if yes please tell procedure
See this tutorial to send email from localhost in PHP – https://www.codexworld.com/how-to-send-email-from-localhost-in-php/
I am getting following error ! Plz help !
Uncaught exception ‘Exception’ with message ‘Facebook needs the CURL PHP extension.’ in C:\wamp\www\inc\base_facebook.php on line 19
You need to enable CURL in PHP. Please follow the below steps.
1. Uncomment the following line in your php.ini file by removing the semicolon (;).
;extension=php_curl.dll
2. Restart your Apache server.
You are offering an essential information. I’ll be your regular visitor.
My partner and I stumbled over here from a different website
and thought I might check things out. I like what I
see so now i am following you. Look forward to
looking over your web page again.
This is excellent blog.
An excellent read. I’ll definitely be back.
Hі just read through this poѕt and wanted to sаy it was very
wel written. You’ve got a new fan.
You diԁ a greаt job wіth tthis post, thanks very mսch.
I am genuinely thankful to the owner of this web site who has shared this
impressive post at at this time.
Hi, I check your blog daily. Your humoristic style is awesome, keep doing
what you’re doing!
That is a really good tutorial.
A must read post!