Twitter is one of the most popular social network on the internet and millions of users are registered with twitter. You can increase the subscriber number of your website using Twitter Login. Nowadays users are not interested in filling the big registration forms. Twitter Login API helps to solve this problem. Twitter API allow your website visitors to log in with their Twitter account at your site without register in your website.
Twitter OAuth PHP library helps web developer to integrate twitter login system by the quick, easy and powerful way. In this tutorial, we’ll show how to implement user Login with Twitter API and store the user information into the MySQL database using PHP. We will go through the complete process to create Twitter Apps and implement sign in with twitter using PHP. The Twitter OAuth PHP library will be used in our script that supports OAuth for Twitter’s REST API.
Before you get started, take a look at the folders and files structure of our Twitter OAuth login script.
- src/
OAuth.phptwitteroauth.php
User.phptwConfig.phpindex.phplogout.php- images/
style.css
Twitter Apps Creation
To access Twitter API you need to create a Twitter App and get the Consumer key & Consumer secret. If you haven’t already created a Twitter App, follow the below steps to creating and configure a Twitter App from the Application Management page.
- At first go to the Application Management page and login with your Twitter account.
- Create New App with the following details.
- Name: Your application Name. This is shown to the user while authorizing.
- Description: Your application Description. This is shown to user while authorizing.
- Website: Your application website.
- Callback URL(*): After authorization, this URL is called with oauth_token.
- Change the apps permission to Read and Write or Read, Write and Access direct messages. For changing the apps permission, you need to add a mobile number to your twitter account.
Once Twitter App creation is completed, click on Test OAuth for testing OAuth. After testing you would be redirected to the OAuth Settings page. From the OAuth Settings page, you’ll get the Consumer key and Consumer secret. Note this Consumer key and Consumer secret for later use in the script.
Are you want to get a detailed guide on Twitter App creation? See this guide to create Twitter OAuth Application.
Database Table Creation
To store the user information from the Twitter database, a table (users) need to be created in your MySQL database. At first, create a database (like codexworld) and run the below SQL on the database. The following SQL creates a users table with some basic fields in the database to hold the Twitter profile information.
CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `oauth_provider` enum('','facebook','google','twitter','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, `gender` varchar(10) COLLATE utf8_unicode_ci NOT NULL, `locale` varchar(10) COLLATE utf8_unicode_ci NOT NULL, `picture` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `username` varchar(100) 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;
Twitter OAuth PHP
The src/ directory contains the Twitter OAuth library for PHP and all the related files are included in our source code.
User Class (User.php)
The User class is used to insert or update Twitter profile information to the database using PHP and MySQL. Specify your MySQL database credentials ($dbHost, $dbUsername, $dbPassword, and $dbName) and table name ($userTbl) to store the user’s profile information.
<?php
class User {
private $dbHost = "localhost";
private $dbUsername = "root";
private $dbPassword = "*****";
private $dbName = "codexworld";
private $userTbl = 'users';
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']."', locale = '".$userData['locale']."', picture = '".$userData['picture']."', username = '".$userData['username']."', link = '".$userData['link']."', modified = '".date("Y-m-d H:i:s")."' 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']."', locale = '".$userData['locale']."', picture = '".$userData['picture']."', username = '".$userData['username']."', link = '".$userData['link']."', created = '".date("Y-m-d H:i:s")."', modified = '".date("Y-m-d H:i:s")."'";
$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;
}
}
?>
Twitter API Configuration (twConfig.php)
In twConfig.php file, define the Consumer Key ($consumerKey), Consumer Secret ($consumerSecret), and Callback URL ($redirectURL) of your Twitter App to connect with Twitter API.
<?php
if(!session_id()){
session_start();
}
//Include Twitter client library
include_once 'src/twitteroauth.php';
/*
* Configuration and setup Twitter API
*/
$consumerKey = 'InsertYourConsumerKey';
$consumerSecret = 'InsertYourConsumerSecret';
$redirectURL = 'http://localhost/twitter_login_php/';
?>
Note that: You’ll find the Consumer Key and Consumer Secret on Twitter OAuth Settings page.
Twitter Authentication & Profile Information (index.php)
Initially, the Sign in with Twitter button will be shown. Once the user authenticates with their Twitter account, the profile information will be fetched and pass to the User class for inserting into the database. Also, the profile details, latest tweets, and tweet post option with logout button will be displayed.
<?php
//start session
session_start();
//Include Twitter config file && User class
include_once 'twConfig.php';
include_once 'User.php';
//If OAuth token not matched
if(isset($_REQUEST['oauth_token']) && $_SESSION['token'] !== $_REQUEST['oauth_token']){
//Remove token from session
unset($_SESSION['token']);
unset($_SESSION['token_secret']);
}
//If user already verified
if(isset($_SESSION['status']) && $_SESSION['status'] == 'verified' && !empty($_SESSION['request_vars'])){
//Retrive variables from session
$username = $_SESSION['request_vars']['screen_name'];
$twitterId = $_SESSION['request_vars']['user_id'];
$oauthToken = $_SESSION['request_vars']['oauth_token'];
$oauthTokenSecret = $_SESSION['request_vars']['oauth_token_secret'];
$profilePicture = $_SESSION['userData']['picture'];
/*
* Prepare output to show to the user
*/
$twClient = new TwitterOAuth($consumerKey, $consumerSecret, $oauthToken, $oauthTokenSecret);
//If user submits a tweet to post to twitter
if(isset($_POST["updateme"])){
$my_update = $twClient->post('statuses/update', array('status' => $_POST["updateme"]));
}
//Display username and logout link
$output = '<div class="welcome_txt">Welcome <strong>'.$username.'</strong> (Twitter ID : '.$twitterId.'). <a href="logout.php">Logout</a>!</div>';
//Display profile iamge and tweet form
$output .= '<div class="tweet_box">';
$output .= '<img src="'.$profilePicture.'" width="120" height="110"/>';
$output .= '<form method="post" action=""><table width="200" border="0" cellpadding="3">';
$output .= '<tr>';
$output .= '<td><textarea name="updateme" cols="60" rows="4"></textarea></td>';
$output .= '</tr>';
$output .= '<tr>';
$output .= '<td><input type="submit" value="Tweet" /></td>';
$output .= '</tr></table></form>';
$output .= '</div>';
//Get latest tweets
$myTweets = $twClient->get('statuses/user_timeline', array('screen_name' => $username, 'count' => 5));
//Display the latest tweets
$output .= '<div class="tweet_list"><strong>Latest Tweets : </strong>';
$output .= '<ul>';
foreach($myTweets as $tweet){
$output .= '<li>'.$tweet->text.' <br />-<i>'.$tweet->created_at.'</i></li>';
}
$output .= '</ul></div>';
}elseif(isset($_REQUEST['oauth_token']) && $_SESSION['token'] == $_REQUEST['oauth_token']){
//Call Twitter API
$twClient = new TwitterOAuth($consumerKey, $consumerSecret, $_SESSION['token'] , $_SESSION['token_secret']);
//Get OAuth token
$access_token = $twClient->getAccessToken($_REQUEST['oauth_verifier']);
//If returns success
if($twClient->http_code == '200'){
//Storing access token data into session
$_SESSION['status'] = 'verified';
$_SESSION['request_vars'] = $access_token;
//Get user profile data from twitter
$userInfo = $twClient->get('account/verify_credentials');
//Initialize User class
$user = new User();
//Insert or update user data to the database
$name = explode(" ",$userInfo->name);
$fname = isset($name[0])?$name[0]:'';
$lname = isset($name[1])?$name[1]:'';
$profileLink = 'https://twitter.com/'.$userInfo->screen_name;
$twUserData = array(
'oauth_provider'=> 'twitter',
'oauth_uid' => $userInfo->id,
'first_name' => $fname,
'last_name' => $lname,
'email' => '',
'gender' => '',
'locale' => $userInfo->lang,
'picture' => $userInfo->profile_image_url,
'link' => $profileLink,
'username' => $userInfo->screen_name
);
$userData = $user->checkUser($twUserData);
//Storing user data into session
$_SESSION['userData'] = $userData;
//Remove oauth token and secret from session
unset($_SESSION['token']);
unset($_SESSION['token_secret']);
//Redirect the user back to the same page
header('Location: ./');
}else{
$output = '<h3 style="color:red">Some problem occurred, please try again.</h3>';
}
}else{
//Fresh authentication
$twClient = new TwitterOAuth($consumerKey, $consumerSecret);
$request_token = $twClient->getRequestToken($redirectURL);
//Received token info from twitter
$_SESSION['token'] = $request_token['oauth_token'];
$_SESSION['token_secret']= $request_token['oauth_token_secret'];
//If authentication returns success
if($twClient->http_code == '200'){
//Get twitter oauth url
$authUrl = $twClient->getAuthorizeURL($request_token['oauth_token']);
//Display twitter login button
$output = '<a href="'.filter_var($authUrl, FILTER_SANITIZE_URL).'"><img src="images/sign-in-with-twitter.png" width="151" height="24" border="0" /></a>';
}else{
$output = '<h3 style="color:red">Error connecting to twitter! try again later!</h3>';
}
}
?>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>Login with Twitter using PHP by CodexWorld</title> <link rel='stylesheet' type='text/css' href='style.css'> </head> <body> <!-- Display login button / profile information -->
<?php echo $output; ?>
</body> </html>
Logout (logout.php)
This file is used to logout the user from their Twitter account.
<?php
//Start session
session_start();
//Remove user data from session
unset($_SESSION['userdata']);
//Destroy all session data
session_destroy();
//Redirect to the homepage
header("Location:index.php");
?>
Getting User Email from Twitter Account
Basically, Twitter doesn’t return the user email after authentication. To get the user’s Email Address, your application needs to be whitelisted by Twitter. To get and store the user email address, follow the below steps.
- Use this form to submit your request. It will take some times please be patient.
- Once whitelisted, the Request email addresses from users checkbox will be available under your app permission on Application Management. Under settings, Privacy Policy URL and Terms of Service URL fields will be available. If enabled, users will be informed that your app can access their email on the OAuth dialog.
- Open the
index.phpfile and useinclude_emailparameter inget()function. To do that replace$user_infovariable line value with the following line of code (probably line no. 74).$userInfo = $connection->get('account/verify_credentials', ['include_email' => 'true']);
- Now you can get the user email address using
$userInfo->email. Provide the user email ($userInfo->email) in$twUserDataarray.
The email field already added to the users table, so, you don’t need to alter the database table.
Conclusion
We’ve tried to make Twitter login integration process simple as much as possible. Using our script, you can easily add Twitter login system to your website. You only need to include few files and specify some minimal settings for integrate login system with Twitter using PHP.
Are you want to get implementation help, or modify or extend the functionality of this script? Submit paid service request

hi CodexWorld
tnx for amazing script .
plz Can you tell me how to save user Access Token and user Access Token Secret to db
where are the files of library OAuth.php and twitterOAuth.php?
The source code contains all the required files including OAuth.php and twitterOAuth.php, download the source code.
Thanks @CodexWorld for reply.
One more thiing..
I want to save twitter account email id in database. so what code I have to change.
Please follow the instruction given in Getting User Email from Twitter Account section of the tutorial.
Its showing A session had already been started in twConfig.php on line 2
when i run it and value does not inserted into database.
In
twConfig.phpfile, replacesession_start();with the following code.if(!session_id()){session_start();
}
Any chance we can also add gender in this
Hi,
How to implement it on my index.html page ?
Regards,
This script needs PHP file for executing.
Thank you so much for help
You guys really rocks..
but please provide link for this with codeigniter
@Parul We’ve published the Twitter Login tutorial for CodeIgniter. Check it out from here – http://www.codexworld.com/twitter-login-codeigniter/
wow great work
i want to ask you can i make the tweeting page
a separate page and tweet for multi accounts ?
hii. login with twitter done successfully. but i am unable to add tweet from there. Please help me
How to auto retweets and auto favorites all the tweets I tweet out from my main account
Good work!!!
Anybody? What do I need to change on your code to make it save the user emails into mysql?
@Jo Follow the following steps to insert the user email to the database.
1. Add new field (email) in users table.
2. Open the
includes/functions.phpfile and add $email parameter to thecheckUser()function. Modify the INSERT and UPDATE query with email column name and value.3. Open the
process.phpfile and pass the Twitter account email tocheckUser()function once user logged in.I’ve got that email permission and did everything on twitter as said.
What do I need to change on your code to make it save the user emails into mysql?
but I want to get the email address also. Is it possible?
@Jayendra To get the user’s Email Address, your application need to be whitelisted by Twitter. Use this form to submit your request. Once whitelisted, the “Request email addresses from users” checkbox will be available under your app permission on Application Management.
Nice Work bro….
How can I download the source code ,when I click on source code no download link appears.
@Gaurav You can download the source code from here – http://www.codexworld.com/downloads/login-with-twitter-using-php
Hello,
Thank You for providing really very good tutorials.
Can you provide tutorial on instagram login with php?
@CodexWorld Thank you very much .You are doing excellent work.Thanks a Lot!!!!!!
@CodexWorld .Great Tutorial But can we get user email from “userinfo” object.or it anyway can we able to get email of user while user login with twitter.?.please help me as soon as possible
@Parag To get the user’s Email Address, your application need to be whitelisted by Twitter. Use this form to submit your request. Once whitelisted, the “Request email addresses from users” checkbox will be available under your app permission on Application Management.
Great tutorial !!! Very easy and simple and Effective one.
Great tutorial!
Any news regarding the tutorial to merge FB,G+ and Twitter at the same time?
Looking forward, I belive it would help a lot of people.
Nice it is working 100%
note * OAUTH_CALLBACK in config file must same im the app setting .
Hi,
how i can integrate it in codeigniter framework, i already subscribe newsletter
thanks
@Duwi We’ll try to publish the same for CodeIgniter framework soon and you will be notified.
how i can integrate it in codeigniter framework
@Dharmendra We’ll publish Login with Twitter in CodeIgniter tutorial soon. Please subscribe our newsletter for getting the notification.
i like to add re tweet and favorite button. how can i do this???
done, i have subscribe it ! hope the tutorial will launch as soon as you can, hope in codeignter ! Thanks
regards Freddy Sidauruk
hi, i have a disscussion, if you don’t mind can i write in here !
i have projects that user can register by using facebook, twitter ?
and the users can input products,
i have been searching in your blog and found it usefull but i have problem how can i make both login working like charm ?
@Freddy
We’ve already published the Facebook, Google, Twitter, and LinkedIn login using PHP tutorial. Also, We have received many requests for a tutorial on making all social login together. We’ll merge all the social login (Facebook, Google, Twitter, and LinkedIn) and publish soon. Please subscribe our newsletter for receiving the tutorial in your mail box.