PHP Facebookla Giriş Uygulaması

Türk Full Stack Developer

PHP Facebookla Giriş Uygulaması

Merhaba, bu yazımda sizlere özellikle son yıllarda çokça aranan ama ne hikmetse hiçbirisi çalışmayan uygulamadan bahsetmek istedim. Uygulamanın adı PHP Facebookla Giriş Uygulaması

 

 

İlk defa 2010 yılında ortaya çıkan bir uygulamaydı. Facebook’un kendine ait olan Apileri dış dünyaya açması ile hızla yaygınlaşan bu uygulama ile kullanıcılar özellikle kayıt formlarında çok daha fazla veri girme yükünden kurtulmuş oldular. Uygulamanın yaptığı iş kullanıcıların Facebook’daki bilgilerini alıp sizin veritabanınıza yazmak. Böylelikle kullanıcılar web sitesine üye olurken adı soyadı gibi alanları doldurmak zorunda kalmıyorlar.

 

 

  • PHP Facebookla Giriş Uygulaması kodlarımı yaplaşmadan önce bir – iki uyarıda bulumak istiyorum bu uygulama ile kullanıcılar web sitenize üye olduklarında kullanıcıların şifresi boş olarak geldiği için bir sonraki girişlerinde normal giriş yapmak isterseler giremezler. O nedenle bu uygulama ile kullanıcılarınızı üye yaptıktan sonraki ilk işiniz onları şifre değiştirme sayfasına yönlendirmek olmalı.
PHP Facebookla Giriş Uygulaması

PHP Facebookla Giriş Uygulaması

Bu aşamada facebookta bir uygulama oluşturduğunuzu varsayarak anlatıma devam ediyorum.

Öncelikle yazımın en sonra paylaşacağım komple uygulama kodlarını indirmelisiniz. Daha sonra uygulamanın içinde yer alan facebooklogin isimli klasörü anadizine atıyoruz. (Ben anadizine göre anlatıcam.)

Klasörün içinde yer alan FbConfig.php dosyasını açıyoruz

$appId         = '1963627900575423'; //Facebook App ID
$appSecret     = '520a1203dfea3308afc245bcfa3b7e76'; //Facebook App Secret
$redirectURL   = 'http://localhost:9090/Emlak/fbloginol.php/'; //Callback URL

Dosyanın içerisinde yer alan bu satırları bulalım. appId değişkenine Facebooktan aldığınız appId’yi yazıyoruz. appSecret değişkenine de appSecreti ve URL alanınada kullanıcıları login olduğundan sonra atacağımız sayfaya yönlendiriyoruz. Dikkat etmeniz gereken şey bu sayfa login kodlarınızın olduğu sayfa olmalı. Yani index.php’ye link veriyorsanız kodlar index.php’de olmalı. (Bahsettiğim kodları fbloginol.php dosyasında veya bir alt satırda bulabilirsiniz)

 

Gelelim asıl PHP Facebookla Giriş Uygulaması Kodları kısmına

require_once 'facebooklogin/fbConfig.php';
require_once 'facebooklogin/user.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 facebook profile info
                    try {
                        $profileRequest = $fb->get('/me?fields=name,first_name,last_name,email,age_range,link,gender,locale,picture');
                        $fbUserProfile = $profileRequest->getGraphNode()->asArray();
                    } 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();
                    
                    // Insert or update user data to the database
                    var_dump($fbUserProfile);
                    $fbUserData = array(
                        'oauth_provider'=> 'facebook',
                        'oauth_uid'     => $fbUserProfile['id'],
                        'first_name'    => $fbUserProfile['first_name'],
                        'age_range'    => $fbUserProfile['age_range'],
                        'last_name'     => $fbUserProfile['last_name'],
                        'email'         => $fbUserProfile['email'],
                        'gender'        => $fbUserProfile['gender'],
                        'locale'        => $fbUserProfile['locale'],
                        'picture'       => $fbUserProfile['picture']['url'],
                        'link'          => $fbUserProfile['link']
                    );
                    $userData = $user->checkUser($fbUserData);
                    
                    // Put user data into session
                    $_SESSION['userData'] = $userData;
                    
                    // Get logout url
                    $logoutURL = $helper->getLogoutUrl($accessToken, $siteURL.'/logout.php');
                    
                    // Render facebook profile data
                    if(!empty($userData)){
                        $output  = '<h1>Facebook Profile Details </h1>';
                        $output .= '<img src="'.$userData['picture'].'">';
                        $output .= '<br/>Facebook ID : ' . $userData['oauth_uid'];
                        $output .= '<br/>Name : ' . $userData['first_name'].' '.$userData['last_name'];
                        $output .= '<br/>age_range : ' . $userData['age_range'];
                        
                        $output .= '<br/>Email : ' . $userData['email'];
                        $output .= '<br/>Gender : ' . $userData['gender'];
                        $output .= '<br/>Locale : ' . $userData['locale'];
                        $output .= '<br/>Logged in with : Facebook';
                        $output .= '<br/><a href="'.$userData['link'].'" target="_blank">Click to Visit Facebook Page</a>';
                        $output .= '<br/>Logout from <a href="'.$logoutURL.'">Facebook</a>'; 
                    }else{
                        $output = '<h3 style="color:red">Some problem occurred, please try again.</h3>';
                    }
                    
                }else{
                    // Get login url
                    $loginURL = $helper->getLoginUrl($redirectURL, $fbPermissions);
                    
                    // Render facebook login button
                    $output = '<a href="'.htmlspecialchars($loginURL).'">Facebookla Login Ol</a>';
                }
                ?>
                <?php echo $output; ?>

Buradaki kodlar login sayfasında olacak olan kodlardır. Bu kodların yaptığı iş basit olarak kullanıcı zaten sistemde kayıtlı ise şifre falan sormadan onları giriş yaptırmak. Eğer kullanıcı kayıtlı değilse kullanıcıyı kayıt etmek.

facebooklogin klasörünün içinde yer alan User.php dosyasını açıyoruz.

<?php
class User {

    function checkUser($userData = array()){
        global $db;
     
        if(!empty($userData)){
            // Check whether user data already exists in database
            
            $prevQuery = $db->veriSaydirSorgu("SELECT * FROM users WHERE oauth_provider = '".$userData['oauth_provider']."' AND oauth_uid = '".$userData['oauth_uid']."' ");
            if($prevQuery>0)
            {
                // Update user data if already exists
                $db->VeriOkuCokluSorgu("SELECT * FROM users WHERE oauth_provider = '".$userData['oauth_provider']."' AND oauth_uid = '".$userData['oauth_uid']."'");
                foreach($db->bilgial as $row)
                {
                    $db->veriGuncelle("users",array("first_name","last_name","email","gender","locale","picture","link","modified"),
                    array($userData['first_name'],$userData['last_name'],$userData['email'],$userData['gender'],$userData['locale'],$userData['picture'],$userData['link'],date("Y-m-d H:i:s"),$row->id),"id");
                }
            }else{
                echo"Burada";
                var_dump($userData);
                // Insert user data
                $db->veriEkle("users",array("NULL","?","?","?","?","?","?","?","?","?"),
                array($userData['oauth_provider'],$userData['oauth_uid'],$userData['first_name'],$userData['last_name']
                ,$userData['email'],$userData['gender']
                ,$userData['locale'],$userData['picture'],$userData['link']));
              
            }
            
        }
        
        // Return user data
        return $userData;
    }
}
?>

Dosyannın içinde yer alan bu kodlarda veriSaydirSorgu kısmı ile başlayan kısımda kullanıcı sistemde varmı ona bakılıyor yani mysql’deki mysql num rows işlevi. Kullanıcı eğer var ise ve facebookdaki verilerinde bir farklılık var ise güncelleme işlemi yapılıyor.

 

 

İf sorgusunun else kısmında ise kullanıcı yok ise yeni kayıt yapmakta.

Bu sayfada dikkat etmeniz gereken, kullanıcıların facebook’daki idleri ile sayıldığı.  ($userData[‘oauth_uid’])

Şimdi de çıkış sayfasını yaparak PHP Facebookla Giriş Uygulaması kodunu bitirelim

require_once 'facebooklogin/fbConfig.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:fbloginol.php");

 

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir