Linkedin (لینکدین) یکی از محبوب ترین شبکه های اجتماعی است که حجم زیادی از کاربران در این social فعالیت می کنند .(لینک نت پارادیس در لینکدین) . مثل گوگل , فی-سبوک و توی-یتر , لینکدین هم نیز برای احراز هویت از طریق سایت را برای کاربران فراهم کرده است .
اگر شما قصد دارید که کاربران سایت شما بتوانند با استفاده از اکانت شبکه اجتماعی خود به سایت لاگین کنند , مقاله لاگین شدن با Linkedin در php را دنبال کنید .
لینکدین یک api برای لاگین شدن کاربر به وبسایت ارایه می دهد. با استفاده از این api لینکدین می توانید اجازه بدهید که کاربران با استفاده از اکانت linkedin خود وارد سایت شوند.
در این آموزش , به شما نحوه ساخت سیستم لاگین شدن با Linkedin در php را نشان می دهیم . قابلیت لاگین شدن با linkedin به کاربران کمک می کند بدون ثبت نام در وبسایت شما توسط اکانت لینکدین وارد سایت شوند .
سیستم لاگین با api لینکدین به شما آسان ترین راه برای لاگین شدن با Linkedin و ذخیره اطلاعات پروفایل کاربران داخل دیتابیس mysql را می دهد . ما از کتابخانه Oauth برای اتصال به لینکدین و ساخت سیستم لاگین linkedin در php استفاده می کنیم.
قبل از شروع ساخت سیستم لاگین شدن با Linkedin در php , نگاهی به ساختار فایل ها و فولدر ها بیاندازید.
- src/
http.php
oauth_client.php
User.class.php
inConfig.php
index.php
logout.php
- css/
- images/
ساخت App لینکدین
- به صفحه Apps در Linkedin Developer Network برید و وارد حساب کاربری خود شوید
- برای ساخت یک App جدید بر روی Add New Application کلیک کنید.
- اطلاعات App جدید را قسمت فرم ثبت نام App وارد کنید
- Company info : اگر قبلا یک صفحه تجاری ساختید . گزینه New Company را انتخاب و نام صفحه تجاری را وارد کنید
- Application info : همه اطلاعات app را وارد و از قسمت Live گزینه Live Status را انتخاب کنید
- Contact info : اطلاعات تماس را وارد کنید
- Oauth User Agreement : گزینه Default Scope را انتخاب و برای Redirect Urls و Accept Redirect URL و Cancel Redirect URL مقدار -> (http://localhost/linkedin_login_php/) که همان مسیر لاگین و آدرس وبسایت شما است را وارد کنید
- چک باکس Linkedin Api Terms را تیک بزنید
- بر روی دکمه Add Application کلیک کنید
- زمانی که اپلیکیشن شما با موفقیت ساخته شد , اطلاعات app شما نمایش داده می شود.
مقادیر Client ID و Client Secret را برای استفاده بعدی کپی و ذخیره کنید
ساخت جداول دیتابیس
برای ذخیره اطلاعات کاربر از روی دیتابیس لینکدین , یک تیبل به اسم 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(255) COLLATE utf8_unicode_ci NOT NULL, `picture` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `username` 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; |
کتابخانه Oauth لینکدین برای php
دایرکتری src/ دارای کتابخانه Linkedin Oauth برای php است .پس نیازی به دانلود جداگانه اون ندارید . همه فایل های مورد نیاز در سورس کد ما است .
کلاس User (َUser.class.php)
کلاس User به ما کمک می کند که عملیات insert و update اطلاعات کاربران را توسط php وmysql انجام بدیم. در فایل User.class.php , نیاز است که اطلاعات ورود دیتابیس و تیبل را در خطوط اول تغییر بدید.
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 = "netparadis"; 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']."', locale = '".$userData['locale']."', picture = '".$userData['picture']."', 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']."', locale = '".$userData['locale']."', picture = '".$userData['picture']."', 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 لینکدین
در فایل inConfig.php باید Client ID ($apikey) , ClientSecret ($apiSecret), CallbackURL (redirectURL) و دسترسی ها ($scope)برای اتصال به API و کار با کتابخانه Oauth را وارد کند
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?php //Include LinkedIn client library require_once 'src/http.php'; require_once 'src/oauth_client.php'; /* * Configuration and setup LinkedIn API */ $apiKey = 'InsertClientID'; $apiSecret = 'InsertClientSecret'; $redirectURL= 'http://localhost/linkedin_login_php/'; $scope = 'r_basicprofile r_emailaddress'; //API permissions ?> |
لاگین شدن و دریافت اطلاعات پروفایل (index.php)
در ابتدا دکمه ورود با Linkedin نمایش داده می شود . بار اول که کاربر با اکانت لینکدین احراز هویت کرد , اطلاعات پروفایل کاربر دریافت و به کلاس User برای insert شدن در دیتابیس mysql ارسال می شود .همچنین دکمه 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 |
<?php //start session if(!session_id()){ session_start(); } //Include Twitter config file && User class include_once 'inConfig.php'; include_once 'User.class.php'; $authUrl = $output = ''; //If user already verified if(isset($_SESSION['oauth_status']) && $_SESSION['oauth_status'] == 'verified' && !empty($_SESSION['userData'])){ //Prepare output to show to the user $userInfo = $_SESSION['userData']; $output = '<div class="login-form"> <div class="head"> <img src="'.$userInfo['picture'].'" alt=""/> </div> <form> <li> <p>'.$userInfo['first_name'].' '.$userInfo['last_name'].'</p> </li> <li> <p>'.$userInfo['email'].'</p> </li> <li> <p>'.$userInfo['locale'].'</p> </li> <div class="foot"> <a href="logout.php">Logout</a> <a href="'.$userInfo['link'].'" target="_blank">View Profile</a> <div class="clear"> </div> </div> </form> </div>'; }elseif((isset($_GET["oauth_init"]) && $_GET["oauth_init"] == 1) || (isset($_GET['oauth_token']) && isset($_GET['oauth_verifier']))){ $client = new oauth_client_class; $client->client_id = $apiKey; $client->client_secret = $apiSecret; $client->redirect_uri = $redirectURL; $client->scope = $scope; $client->debug = false; $client->debug_http = true; $application_line = __LINE__; if(strlen($client->client_id) == 0 || strlen($client->client_secret) == 0){ die('Please go to LinkedIn Apps page https://www.linkedin.com/secure/developer?newapp= , '. 'create an application, and in the line '.$application_line. ' set the client_id to Consumer key and client_secret with Consumer secret. '. 'The Callback URL must be '.$client->redirect_uri.'. Make sure you enable the '. 'necessary permissions to execute the API calls your application needs.'); } //If authentication returns success if($success = $client->Initialize()){ if(($success = $client->Process())){ if(strlen($client->authorization_error)){ $client->error = $client->authorization_error; $success = false; }elseif(strlen($client->access_token)){ $success = $client->CallAPI('http://api.linkedin.com/v1/people/~:(id,email-address,first-name,last-name,location,picture-url,public-profile-url,formatted-name)', 'GET', array('format'=>'json'), array('FailOnAccessError'=>true), $userInfo); } } $success = $client->Finalize($success); } if($client->exit) exit; if($success){ //Initialize User class $user = new User(); //Insert or update user data to the database $fname = $userInfo->firstName; $lname = $userInfo->lastName; $inUserData = array( 'oauth_provider'=> 'linkedin', 'oauth_uid' => $userInfo->id, 'first_name' => $fname, 'last_name' => $lname, 'email' => $userInfo->emailAddress, 'gender' => '', 'locale' => $userInfo->location->name, 'picture' => $userInfo->pictureUrl, 'link' => $userInfo->publicProfileUrl, 'username' => '' ); $userData = $user->checkUser($inUserData); //Storing user data into session $_SESSION['userData'] = $userData; $_SESSION['oauth_status'] = 'verified'; //Redirect the user back to the same page header('Location: ./'); }else{ $output = '<h3 style="color:red">Error connecting to LinkedIn! try again later!</h3>'; } }elseif(isset($_GET["oauth_problem"]) && $_GET["oauth_problem"] <> ""){ $output = '<h3 style="color:red">'.$_GET["oauth_problem"].'</h3>'; }else{ $authUrl = '?oauth_init=1'; } ?> <!DOCTYPE html> <html lang="en"> <head> <title>Login with LinkedIn using PHP by CodexWorld</title> <link rel="stylesheet" href="css/style.css"/> </head> <body> <!-- Display login button / profile information --> <?php echo $output; ?> <?php if(!empty($authUrl)){ echo '<div class="linkedin_btn"><a href="'.$authUrl.'"><img src="images/sign-in-with-linkedin.png" /></a></div>'; } ?> </body> </html> |
خروج از سیستم (logout.php)
زمانی که کاربر قصد خروج از اکانت خودش را داشت , کاربر به صفحه logout.php ریدایرکت می شود.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<?php //start session session_start(); //Unset token and user data from session unset($_SESSION['oauth_status']); unset($_SESSION['userData']); //Destroy entire session session_destroy(); //Redirect to homepage header("Location:index.php"); exit; ?> |
جمع بندی
در این آموزش سعی کردیم یک سیستم لاگین شدن با Linkedin در php را به آسان ترین روش ممکن آموزش بدیم . با استفاده از اسکریپت ما به راحتی می توانید قابلیت لاگین شدن با Linkedin را به وبسایت خود و یا پروژه هایی که می نویسید اضافه کنید .
اگر درخواست یا پیشنهادی در مورد این آموزش داشتید لطفا از قسمت نظرات ارسال کنید.
برای دانلود سورس کد پروژه لاگین شدن با Linkedin در php از قسمت زیر اقدام کنید
موفق و پیروز باشید