Twitter (توییتر) یک شبکه اجتماعی بسیار معروف بر روی اینترنت است و میلیون ها کاربر در آن عضو هستنید (لینک اکانت نت پارادیس) . می توانید تعداد اعضای سایت و مشترک خبرنامه را با توییتر افزایش بدید.
این روزها کاربران علاقه و حوصله چندانی برای پرکردن صفحات ثبت نام بزرگ را ندارند . لاگین شدن با twitter در php و استفاده از API آن این مشکل را حل کرده است.
API توییتر به بازدیدکنندگان سایت شما اجازه لاگین شدن با اکانت twitter در سایت شما بدون ثبت نام را می دهد .
کتابخانه Twitter Oauth PHP به توسعه دهندگان وب کمک می کند که سیستم لاگین شدن با twitter در php را به سرعت ، به راحتی و با روشی قدرتمند پیاده سازی کند.
در مقاله آموزشی لاگین شدن با twitter در php قصد داریم به شما نحوه پیاده سازی سیستم لاگین و ثبت نام کاربر با API توییتر و ذخیره اطلاعات کاربر در دیتابیس MySQL توسط php را آموزش دهیم.
قصد داریم فرایند کامل ساخت App توییتر و پیاده سازی لاگین شدن با twitter در php را دنبال کنیم . کتابخانه Twitter Oauth PHP در اسکریپت ما استفاده استفاده خواهد شده که از Oauth برای REST API بهره برده است .
قبل از شروع آموزش لاگین شدن با twitter در php ، نگاهی به ساختار فایل ها و فولدرهای اسکریپت کتابخانه Twitter Oauthمیاندازیم.
- src/
OAuth.php
twitteroauth.php
User.php
twConfig.php
index.php
logout.php
- images/
style.css
ساخت App توییتر
برای دسترسی به API توییتر نیاز داریم که یک App توییتر بسازیم و کلید مصرف کننده (Consumer) و کلید Secret را دریافت کنیم.
اگر قبلا یک App توییتر نساختید ، مراحل زیر را برای ساخت و پیکربندی یک App توییتراز طریق صفحه Application management دنبال کنید.
- به صفحه Application Management بروید و وارد اکانت توییتر twitter خود شوید .
- یک App جدید را با مشخصات زیر بسازید
- Name : اسم اپلیکشن شما . این نام زمانی که کاربر در حال احراز هویت و لاگین به اکانت توییتر برای دسترسی و لاگین سایت شما است ، نمایش داده می شود.
- Description : توضیحاتی App شما . این مورد در زمان احراز هویت کاربر نمایش داده می شود
- Website : سایت شما
- Callback URL (*) :بعد از احراز هویت ، این آدرس URL با oauth_token صدا زده می شود .
- دسترسی (permission) app را به Read and Write یا Read, Write and Access direct messages تغییر بدید . برای تغییر دسترسی شما باید شماره موبایل خود را به اکانت توییتر اضافه کنید.
بعد از اتمام ساخت app توییتر ، بر روی Test Oauth کلیک کنید . بعد از تست شما باید به صفحه تنظیمات Oauth منتقل بشوید . از صفحه تنظیمات شما کلید مصرف کننده (Consumer) و کلید Secret را دریافت می کنید.
این کلید ها را جایی یاداشت کنید بعدا در ساخت اسکریپت لاگین شدن با twitter در php به آنها نیاز خواهیم داشت .
نکته : برای کپی شدن کامل کد ها بر روی آن دوبار کلیک تا وارد بخش سفید و کپی شود در غیرانصورت امکان دارد کد ها ناقص کپی شود
ساخت جداول دیتابیس
برای ذخیره اطلاعات کاربر از دیتابیس توییتر ، یک جدول (users) در دیتابیس MySQL خود بسازید . در قدم اول ، یک دیتابیس (مثل netparadis) ایجاد کنید و کد SQL زیر را بر روی دیتابیس اجرا کنید.
کوئری SQL زیر یک جدول users با چند فیلد ابتدایی برای ذخیره اطلاعات پروفایل توییتر کاربر ایحاد می کند.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
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
دایرکتری src/ شامل کتابخانه Twitter Oauth PHP و همه فایل های مربوط به سورس کد ما می باشد.
کلاس User (User.php)
کلاس User برای insert و update اطلاعات پروفایل توییتر در دیتابیس توسط php و mysql استفاده می شود . در خطوط اول حتما اطلاعات دیتابیس (نام کاربری – پسورد و نام دیتابیس) و جدول را تغییر بدید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
<?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; } } ?> |
فایل پیکربندی API توییتر (twConfig.php)
در فایل twConfig.php ، کلید مصرف کننده (Consumer) و کلید Secret را در متغییر های $consumerKey و $consumerSecret ، و آدرس URL بازگشتی ($redirectURL) را برای اتصال به App توییتر خود توسط API را وارد کنید
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?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/'; ?> |
نکته : برای پیدا کردن کلید مصرف کننده (Consumer) و کلید Secret به صفحه تنظیمات Twitter Oauth مراجعه کنید.
احراز هویت توییتر و اطلاعات پروفایل کاربر (index.php)
در ابتدا ، دکمه لاگین با twitter نمایش داده می شود . بعد از احراز هویت کاربر با اکانت توییتر ، اطلاعات پروفایل دریافت و به کلاس User برای insert شدن در دیتابیس فرستاده میشود.
همچنین ، جزئیات پروفایل ، آخرین توییت ها ، گزینه های توییت مطلب و دکمه خروج (logout) نمایش داده خواهد شد.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 |
<?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.php)
این فایل برای خروج کاربر از اکانت توییتر خود استفاده می شود.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?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"); ?> |
دریافت ایمیل کاربر از اکانت twitter
اساسا ، توییتر آدرس ایمیل کاربر را بعد از احراز هویت بازگشت نمی دهد . برای دریافت آدرس ایمیل کاربران ، app شما باید در لیست پاک توییتر قرار بگیرید . برای دریافت و ذخیره ایمیل کاربر ، مراحل زیر را دنبال کنید .
- از این فرم برای ثبت درخواست خود استفاده کنید . این فرایند ممکن است طول بکشد ، پس صبور باشید .
- بعد از قرار گیری در لیست پاک ، چک باکس “درخواست آدرس ایمیل از کاربران ” در زیر قسمت سطح دسترسی (permission) صفحه Application management اضافه می شود .
- فایل index.php را باز کنید و از پارامتر include_email در تابع get() استفاده کنید . برای اینکار خط متغییر $user_info را بای کد زیر جایگزین کنید (احتمالا خط شماره ۷۴)
1 |
$userInfo = $connection->get('account/verify_credentials', ['include_email' => 'true']); |
حالا می توانید ایمیل کاربر را با استفاده از $userinfo->email دریافت کنید . ایمیل کاربر را بعد دریافت در آرایه $twUserData اضافه کنید
فیلد ایمیل از قبل در جدول users وجود دارد ، پس نیازی به تغییر ساختار جداول دیتابیس ندارید.
جمع بندی
سعی کردیم یک سیستم لاگین شدن با twitter در php تاحد امکان به صورت ساده پیاده کنیم .
قبلا در مورد لاگین شدن با Linkedin در php مقاله ای نوشتیم. با استفاده از اسکریپت php ما ، به راحتی می توانید یک سیستم لاگین و ثبت نام با twitter را در وبسایت خود پیاده کنید
. هر گونه مشکلی در پیاده سازی این مورد داشتید از بخش نظرات ما را مطلع کنید
برای دانلود سورس کد لاگین شدن با twitter در php از قسمت زیر اقدام کنید.
موفق باشید.