AllsWeb Blog
No Result
View All Result
  • Home
  • Main Home
  • PHP and MySQL
  • JavaScript
    • jQuery & AJAX
  • WordPress
  • SEO
  • Web Hosting
  • Comparison
Support
Knowledgebase
  • Home
  • Main Home
  • PHP and MySQL
  • JavaScript
    • jQuery & AJAX
  • WordPress
  • SEO
  • Web Hosting
  • Comparison
No Result
View All Result
AllsWeb White Logo
No Result
View All Result
Home PHP and MySQL

Login with Instagram using PHP

Register Instagram Client ID

Lakshika Mathur by Lakshika Mathur
December 15, 2019
Reading Time: 10 mins read
1
Login with Instagram using PHP

The Instagram API gives you an easy way to a unified user authentication system in the web application. Therefore, log in with Instagram permits the user to authenticate with their Instagram account and log into the website. Since the Instagram API controls the authentication process, the web application does not require the user’s registration functionality. Instagram login provides quick access to the user without making an account on the site.

RELATED POSTS

What is Application Programming Interface (APIs)?

Like Dislike Rating System with jQuery, Ajax, and PHP

Star Rating System with jQuery, Ajax, PHP, and MySQL

The Instagram API uses OAuth 2.0 to authorize the user. As a result, you can quickly implement the Login system with Instagram using the Instagram API and PHP. Therefore, In this tutorial, we will explain to you how to integrate Login with Instagram using PHP. CURL is a dominant and straightforward way to reach the Instagram API with PHP. So, we will use cURL to integrate the Instagram API in PHP. Moreover, we will implement the following functionality in the example Instagram OAuth script.

  • Authenticate with an Instagram account using access_token.
  • Retrieve the user’s profile data from an Instagram account.
  • The profile information will be stored in the database using PHP and MySQL.
  • Show the user’s account information.

Before proceeding to integrate Instagram Login in PHP, So, let’s have a look at the file structure.

instagram_login_with_php/
├── config.php
├── index.php
├── logout.php
├── User.class.php
├── InstagramAuth.class.php
├── images/
└── css/

Register Instagram Client ID

Client ID and Client Secret are needed to access the Instagram API. Before you begin to implement Instagram login with PHP on the website, follow the steps below to register a new Instagram client and obtain the client ID and incognito.

  • Firstly, go to the Instagram Developer Panel.
  • Secondly, register and log in to your developer account.
Register Instagram Client ID
Register Instagram Client ID

 

  • Thirdly, go to the Manage Clients page, and click on Register a New Client button.
  • Now, give the Application info and click the Register to submit.
    • You must match the Valid redirect URIs must with the redirect URL specified at the time of API request.
  • After creating the App, it will be listed in the Manage Clients page. Click the MANAGE button
Register Instagram Client ID
Register Instagram Client ID

Now, you will see the Client ID and Client Secret in the App Details page. Note: These API credentials (client secret and client ID) will be for later use in a script.

Create Database Table

You need a table in the database to store the user’s profile information from Instagram. The following SQL creates a user table with some necessary fields in the MySQL database.

CREATE TABLE `users` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `oauth_provider` enum('instagram','facebook','google','linkedin','') COLLATE utf8_unicode_ci NOT NULL,
 `oauth_uid` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
 `first_name` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
 `last_name` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
 `email` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
 `username` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
 `gender` varchar(5) COLLATE utf8_unicode_ci NOT NULL,
 `picture` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
 `link` varchar(255) 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;

Instagram OAuth Library

The InstagramoAuth class helps to authorize with the Instagram API using PHP.

  • getAccessToken() – Retrieve access_token from Instagram OAuth API (OAuth/access_token) using PHP cURL.
  • getUserProfileInfo() – Fetch the user’s profile data from Instagram User API (users/self) by access_token.
<?php 
/* 
 * Instagram API Class 
 * This class helps to authenticate with Instagram API 
 * @author    CodexWorld.com 
 * @url        http://www.codexworld.com 
 * @license    http://www.codexworld.com/license 
 */ 
class InstagramAuth { 
    public $client_id         = ''; 
    public $client_secret     = ''; 
    public $redirect_url     = ''; 
    private $act_url         = 'https://api.instagram.com/oauth/access_token'; 
    private $ud_url         = 'https://api.instagram.com/v1/users/self/'; 
     
    public function __construct(array $config = array()){ 
        $this->initialize($config); 
    } 
     
    public function initialize(array $config = array()){ 
        foreach ($config as $key => $val){ 
            if (isset($this->$key)){ 
                $this->$key = $val; 
            } 
        } 
        return $this; 
    } 
     
    public function getAuthURL(){ 
        $authURL = "https://api.instagram.com/oauth/authorize/?client_id=" . $this->client_id . "&redirect_uri=" . urlencode($this->redirect_url) . "&response_type=code&scope=basic"; 
        return $authURL; 
    } 
     
    public function getAccessToken($code) {     
        $urlPost = 'client_id='. $this->client_id . '&client_secret=' . $this->client_secret . '&redirect_uri=' . $this->redirect_url . '&code='. $code . '&grant_type=authorization_code'; 
        $ch = curl_init();         
        curl_setopt($ch, CURLOPT_URL, $this->act_url);         
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
        curl_setopt($ch, CURLOPT_POST, 1);         
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
        curl_setopt($ch, CURLOPT_POSTFIELDS, $urlPost);             
        $data = json_decode(curl_exec($ch), true);     
        $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);     
        curl_close($ch); 
        if($http_code != '200'){     
            throw new Exception('Error : Failed to receive access token'.$http_code); 
        } 
        return $data['access_token'];     
    } 
 
    public function getUserProfileInfo($access_token) {  
        $url = $this->ud_url.'?access_token=' . $access_token;     
 
        $ch = curl_init();         
        curl_setopt($ch, CURLOPT_URL, $url);         
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);     
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
        $data = json_decode(curl_exec($ch), true); 
        $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);     
        curl_close($ch);  
        if($data['meta']['code'] != 200 || $http_code != 200){ 
            throw new Exception('Error : Failed to get user information'); 
        } 
        return $data['data']; 
    } 
}

 

User Class (User.class.php)

The User class handles the database operations (insert, connect, and update) using MySQL and PHP.

  • __construct() – Connect to the MySQL database.
  • checkUser() – Enter or update user account data (Instagram profile information) based on OAuth provider and ID. Returns the data of the user’s account as an array.
<?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($userData = array()){ 
        if(!empty($userData)){ 
            // Check whether user data already exists in database 
            $prevQuery = "SELECT * FROM ".$this->userTbl." WHERE oauth_provider = '".$userData['oauth_provider']."' AND oauth_uid = '".$userData['oauth_uid']."'"; 
            $prevResult = $this->db->query($prevQuery); 
            if($prevResult->num_rows > 0){ 
                // Update user data if already exists 
                $query = "UPDATE ".$this->userTbl." SET first_name = '".$userData['first_name']."', last_name = '".$userData['last_name']."', email = '".$userData['email']."', gender = '".$userData['gender']."', picture = '".$userData['picture']."', link = '".$userData['link']."', modified = NOW() WHERE oauth_provider = '".$userData['oauth_provider']."' AND oauth_uid = '".$userData['oauth_uid']."'"; 
                $update = $this->db->query($query); 
            }else{ 
                // Insert user data 
                $query = "INSERT INTO ".$this->userTbl." SET oauth_provider = '".$userData['oauth_provider']."', oauth_uid = '".$userData['oauth_uid']."', first_name = '".$userData['first_name']."', last_name = '".$userData['last_name']."', email = '".$userData['email']."', gender = '".$userData['gender']."', picture = '".$userData['picture']."', link = '".$userData['link']."', created = NOW(), modified = NOW()"; 
                $insert = $this->db->query($query); 
            } 
             
            // Get user data from the database 
            $result = $this->db->query($prevQuery); 
            $userData = $result->fetch_assoc(); 
        } 
         
        // Return user data 
        return $userData; 
    } 
}

 

Site Settings and API Configuration (config.php)

Define the database settings and Instagram API configuration constant variables in the config.php file.

Database Constants:

  • DB_HOST – Specify the database host.
  • DB_USERNAME – Specify the database username.
  • DB_PASSWORD – Specify the database password.
  • DB_NAME – Specify the database name.
  • DB_USER_TBL – Specify the table name where you’ll store the the user’s account data.

Instagram API Constants:

  • INSTAGRAM_CLIENT_ID – Specify the Instagram Client ID.
  • INSTAGRAM_CLIENT_SECRET – Specify the Instagram Client Secret.
  • INSTAGRAM_REDIRECT_URI – Specify the Callback URL.

Initiate Instagram Auth class:

The Instagram auth library is used to work with the Instagram API and the OAuth client.

<?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'); 
 
// Instagram API configuration 
define('INSTAGRAM_CLIENT_ID', 'Instagram_Client_Id'); 
define('INSTAGRAM_CLIENT_SECRET', 'Instagram_Client_Secret'); 
define('INSTAGRAM_REDIRECT_URI', 'Callback_URL'); 
 
// Start session 
if(!session_id()){ 
    session_start(); 
} 
 
/* 
 * For the internal purposes only  
 * changes not required 
 */ 
 
// Include Instagram OAuth library 
require_once 'InstagramAuth.class.php'; 
 
// Initiate Instagram Auth class 
$instagram = new InstagramAuth(array( 
    'client_id' => INSTAGRAM_CLIENT_ID, 
    'client_secret' => INSTAGRAM_CLIENT_SECRET, 
    'redirect_url' => INSTAGRAM_REDIRECT_URI 
));

Note: You’ll see the Client ID and Client Secret on your Instagram Client settings page.

Login with Instagram and Get Account Data (index.php)

Handle the Instagram API authentication process using PHP.

  • Firstly, generate the authentication URL using the getAuthURL() method of Instagram Auth class, and the Instagram Sign-in button is shown on the web page.
  • Secondly, if the user authenticates with their Instagram account, the following things happen:
    • The access_token is retrieved using getAccessToken() by the code which we have received during the authorization step.
    • Retrieve the profile data from the Instagram account using getUserProfileInfo() by the access_token.
    • So, by using the checkUser() function of User class your account data will be inserted into the database 
    • Store the user’s account data in the PHP SESSION.
    • You have to show the Instagram profile details (ID, Last name, First name, Picture, and Profile link) on the webpage.
<?php 
// Include configuration file 
require_once 'config.php'; 
 
// Include User class 
require_once 'User.class.php'; 
 
// If URL contains 'code' parameter that passed by Instagram in the Redirect URL 
if(isset($_GET['code'])){ 
    try { 
        // Get the access token  
        $access_token = $instagram->getAccessToken($_GET['code']); 
 
        // Get user profile info 
        $userData = $instagram->getUserProfileInfo($access_token); 
    } catch (Exception $e) { 
        $authErr = $e->getMessage(); 
    } 
     
    if(!empty($userData)){ 
        $username = $userData['username']; 
        $full_name = $userData['full_name']; 
        $full_name_arr = explode(' ',$full_name); 
        $first_name = !empty($full_name_arr[0])?$full_name_arr[0]:''; 
        $last_name = !empty($full_name_arr[1])?$full_name_arr[1]:''; 
        $link = 'https://www.instagram.com/'.$username; 
         
        // Initialize User class 
        $user = new User(); 
         
        // Getting user's profile data 
        $intUserData = array(); 
        $intUserData['oauth_uid']     = $userData['id']; 
        $intUserData['username']      = $username; 
        $intUserData['first_name']     = $first_name; 
        $intUserData['last_name']      = $last_name; 
        $intUserData['picture']    = !empty($userData['profile_picture'])?$userData['profile_picture']:''; 
        $intUserData['link']       = $link; 
        $intUserData['email']      = ''; 
        $intUserData['gender']     = ''; 
 
        // Insert or update user data to the database 
        $intUserData['oauth_provider'] = 'instagram'; 
        $userData = $user->checkUser($intUserData); 
         
        // Storing user data in the session 
        $_SESSION['userData'] = $userData; 
         
        // Get logout url 
        $logoutURL = INSTAGRAM_REDIRECT_URI.'logout.php'; 
         
        // Render Instagram profile data 
        $output  = '<h2>Instagram Profile Details</h2>'; 
        $output .= '<div class="ac-data">'; 
        $output .= '<img src="'.$userData['picture'].'"/>'; 
        $output .= '<p><b>Account ID:</b> '.$userData['oauth_uid'].'</p>'; 
        $output .= '<p><b>Name:</b> '.$userData['first_name'].' '.$userData['last_name'].'</p>'; 
        $output .= '<p><b>Logged in with:</b> Instagram</p>'; 
        $output .= '<p><b>Profile Link:</b> <a href="'.$userData['link'].'" target="_blank">Click to visit Instagram page</a></p>'; 
        $output .= '<p><b>Logout from <a href="'.$logoutURL.'">Instagram</a></p>'; 
        $output .= '</div>'; 
    }else{ 
        $output = '<h3 style="color:red">Instagram authentication has failed!</h3>'; 
        if(!empty($authErr)){ 
            $output = '<p style="color:red">'.$authErr.'</p>'; 
        } 
    } 
}else{ 
    // Get login url 
    $authURL = $instagram->getAuthURL(); 
     
    // Render Instagram login button 
    $output = '<a href="'.htmlspecialchars($authURL).'" class="instagram-btn"><span class="btn-icon"></span><span class="btn-text">Login with Instagram</span></a>'; 
} 
?>

<!DOCTYPE html>
<html lang="en">
<head>
<title>Login with Instagram using PHP by CodexWorld</title>
<meta charset="utf-8">

<link rel="stylesheet" href="css/style.css">
</head>
<body>
<div class="container">
    <div class="inst-box">
        <!-- Display login button / Instagram profile information -->
        <?php echo $output; ?>
    </div>
</div>
</body>
</html>

Logout (logout.php)

You have to load logout.php file if the user wants to log out from their Instagram account.

  • Firstly, remove access token and user data from the SESSION.
  • After that, redirect the user to the homepage.
<?php 
// Remove user data from session 
unset($_SESSION['userData']); 
 
// Redirect to the homepage 
header("Location:index.php"); 
?>

Conclusion

Firstly, our Instagram Authentic Library helps you to integrate Instagram login with PHP. Secondly, our example code simplifies the Instagram API integration process with PHP cURL. Therefore, You can quickly implement Instagram login on a website with some minimum API settings.

Also, read our previous blog- Login with LinkedIn using JavaScript SDK

Tags: InstagramPHP
ShareTweetSendShareSharePinScan
Lakshika Mathur

Lakshika Mathur

Related Posts

What is Application Programming Interface (APIs), Types, and Importance.
PHP and MySQL

What is Application Programming Interface (APIs)?

January 29, 2022
124
Like Dislike Rating System with jQuery, Ajax, and PHP
jQuery & AJAX

Like Dislike Rating System with jQuery, Ajax, and PHP

January 6, 2020
826
Star Rating System with jQuery, Ajax, PHP, and MySQL
jQuery & AJAX

Star Rating System with jQuery, Ajax, PHP, and MySQL

January 6, 2020
182
How to Force Download File in PHP
PHP and MySQL

How to Force Download File in PHP

January 2, 2020
87
How to Connect to the Remote MySQL Database using PHP
PHP and MySQL

How to Connect to the Remote MySQL Database using PHP

January 1, 2020
29
How to Generate QR Code with PHP using Google Chart API
PHP and MySQL

How to Generate QR Code with PHP using Google Chart API

January 1, 2020
110
Next Post
Login with Instagram using JavaScript SDK

Login with Instagram using JavaScript SDK

Google Invisible reCAPTCHA with PHP

Google Invisible reCAPTCHA with PHP

Comments 1

  1. zaid shah says:
    2 years ago

    not working in 2021

    Reply

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Categories

  • Comparison (3)
  • HTML & CSS (9)
  • Interesting Facts (1)
  • JavaScript (27)
    • jQuery & AJAX (18)
  • PHP and MySQL (48)
  • Security (10)
  • SEO (2)
  • Trademark (2)
  • Tutorials (5)
  • Uncategorized (1)
  • Web Hosting (19)
    • VPS Server (5)
  • WordPress (8)

Recent Posts

  • Is the Trademark valuable to your Brand or domain?
  • Ideas For Ten Fantastic Online Business From Home
  • Some best free WordPress Themes for Affiliate Marketing Websites
  • Home
  • Posts
  • Privacy Policy
  • Terms and Conditions

Built and Maintained With ♥ by AllsWeb Team

No Result
View All Result
  • Home
  • Main Home
  • PHP and MySQL
  • JavaScript
    • jQuery & AJAX
  • WordPress
  • SEO
  • Web Hosting
  • Comparison

Built and Maintained With ♥ by AllsWeb Team

Go to mobile version