2017-04-26 16 views
7

संपादित प्रश्न में उपयोगकर्ता का निर्माण नहीं करता:php फेसबुक एसडीके वर्डप्रेस

इम मेरी वर्डप्रेस का उपयोग कर साइट पर एक फेसबुक लॉगइन प्लगइन बनाने की कोशिश कर this sdk

जब मैं लॉगइन करने के लिए फेसबुक बटन पर क्लिक करें या पंजीकरण करें यह फेसबुक के माध्यम से एक छोटी सी खिड़की खुलता है जो जारी रखता है लेकिन इसके बाद यह वर्डप्रेस डेटाबेस में उपयोगकर्ता को नहीं बनाता है और वर्डप्रेस फूटर तोड़ता है, इसलिए पेज रीफ्रेश के बाद यह लॉगिन फॉर्म के तहत An active access token must be used to query information about the current user. मैसेज दिखाता है।

मेरा पूरा फेसबुक लॉगइन php कोड इस एक है:

<?php 
    include 'facebook/facebook.php'; 
    function gazi_fb_loginForm(){ 

      gazi_fb_error_message(); 

      gazi_fb_LoadScript(); 

      if(is_user_logged_in()==false){ 

      ?> 

       <div class="facebook_wrapper"> 
       <img src="<?php echo plugin_dir_url(__FILE__).'images/facebook_or.png';?>" style="border:none; box-shadow:none;"> 
       <br> 
       <a href="javascript:void(0)" onClick="FBLogin();"> 

       <img src="<?php echo plugin_dir_url(__FILE__).'images/facebook_button.png';?>" alt="Fb Connect" title="Login with facebook" /></a></div> 

      <?php 

      } 

     } 



    function gazi_fb_LoadScript(){ 

     global $wpdb; 

     $gazi_option=$wpdb->prefix."gazi_option"; 

     $path = plugin_dir_url(__FILE__); // define path to link and scripts 

     $pageURL = get_permalink(); 

     $sign = strpos($pageURL,'?')?'&':'?'; 

     //facebook app secret 

    $qry1="SELECT value FROM $gazi_option WHERE fieldname='gazi_facebook_app_secret'"; 

    $facebook_app_secret = $wpdb->get_var($qry1); 

    $qry2="SELECT value FROM $gazi_option WHERE fieldname='gazi_facebook_app_id'"; 

    $facebook_app_id = $wpdb->get_var($qry2); 



     $facebook = new Facebook(array(

      'appId'  => $facebook_app_id, 

      'secret' => $facebook_app_secret, 

      )); 

     ?> 

     <script type="text/javascript"> 
window.fbAsyncInit = function() { 
FB.init({ 
     appId  : '<?php echo $facebook_app_id; ?>', 
     xfbml  : true, 
     status  : true, 
     cookie  : true, 
     version : 'v2.1' 
}); 


FB.getLoginStatus(function(response) { 
      if (response.status === 'connected') { 
      console.log('Logged in.'); 
} 
      else { 
      console.log('initiate FB login...'); 
      FB.login(); 
      } 
}); 

FB.api('/me/feed',function(response){ 
      var idDiv=document.getElementById('result'); 
      idDiv.textContent=JSON.stringify(response); 
    }); 
}; 

(function(d){ 
    var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0]; 
    if (d.getElementById(id)) {return;} 
    js = d.createElement('script'); js.id = id; js.async = true; 
    js.src = "//connect.facebook.net/en_US/all.js"; 
    ref.parentNode.insertBefore(js, ref); 
}(document)); 

function FBLogin(){ 
    FB.login(function(response){ 
     if(response.authResponse){ 
      window.location.href = "<?php echo $pageURL.$sign;?>option=fblogin"; 
     } 
    }, {scope: 'email'}); 
} 

    </script> 

     <?php 

     } 



    function gazi_fb_error_message(){ 

      if(isset($_SESSION['msg'])){ 

       echo '<div class="'.$_SESSION['msg_class'].'">'.$_SESSION['msg'].'</div>'; 

       unset($_SESSION['msg']); 

       unset($_SESSION['msg_class']); 

      } 

     } 



    function gazi_fb_login_validate(){ 



     $path = plugin_dir_url(__FILE__); // define path to link and scripts 

     $pageURL = get_permalink(); 

     $sign = strpos($pageURL,'?')?'&':'?'; 



     if(isset($_REQUEST['option']) && $_REQUEST['option'] == "fblogin"){ 

     global $wpdb; 

     $gazi_option=$wpdb->prefix."gazi_option"; 

     //facebook app secret 

      $qry1="SELECT value FROM $gazi_option WHERE fieldname='gazi_facebook_app_secret'"; 

      $facebook_app_secret = $wpdb->get_var($qry1); 

      $qry2="SELECT value FROM $gazi_option WHERE fieldname='gazi_facebook_app_id'"; 

      $facebook_app_id = $wpdb->get_var($qry2); 

      $facebook = new Facebook(array(

       'appId' => $facebook_app_id, 

       'secret' => $facebook_app_secret, 

       'cookie' => TRUE, 

      )); 

      $fbuser = $facebook->getUser(); 

      if ($fbuser) { 

       try { 

        $user_profile = $facebook->api('/me'); 

       } 

       catch (Exception $e) { 

        echo $e->getMessage(); 

        exit(); 

       } 

       if (!isset($user_profile['email'])) $user_profile['email'] = $user_profile['id'] . '@facebook.com'; 

       $user_fbid = $fbuser; 

       $user_email = $user_profile["email"]; 

       $user_fnmae = $user_profile["first_name"]; 



       if(email_exists($user_email)) { // user is a member 

        $user = get_user_by('login', $user_email); 

        $user_id = $user->ID; 


        wp_set_auth_cookie($user_id, true); 

       } else { // this user is a guest 

        $random_password = wp_generate_password(10, false); 

        $user_id = wp_create_user($user_email, $random_password, $user_email); 

        update_user_meta($user_id, 'avtar_image', 'https://graph.facebook.com/' . $user_profile['id'] . '/picture?type=large'); 

        wp_update_user(array(

           'ID' => $user_id, 

           'display_name' => $user_profile['name'], 

           'first_name' => $user_profile['first_name'], 

           'last_name' => $user_profile['last_name'] 

          )); 

        wp_set_auth_cookie($user_id, true); 

       } 



       wp_redirect($pageURL.$sign.'login4=1'); 

       exit; 



      }  

     } 

    } 

    ?> 
यहाँ

उपरोक्त कोड में जावास्क्रिप्ट है।

<script type="text/javascript"> 

window.fbAsyncInit = function() { 
FB.init({ 
     appId  : '<?php echo $facebook_app_id; ?>', 
     xfbml  : true, 
     status  : true, 
     cookie  : true, 
     version : 'v2.1' 
}); 


FB.getLoginStatus(function(response) { 
      if (response.status === 'connected') { 
      console.log('Logged in.'); 
} 
      else { 
      console.log('initiate FB login...'); 
      FB.login(); 
      } 
}); 

FB.api('/me/feed',function(response){ 
      var idDiv=document.getElementById('result'); 
      idDiv.textContent=JSON.stringify(response); 
    }); 
}; 

(function(d){ 
    var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0]; 
    if (d.getElementById(id)) {return;} 
    js = d.createElement('script'); js.id = id; js.async = true; 
    js.src = "//connect.facebook.net/en_US/all.js"; 
    ref.parentNode.insertBefore(js, ref); 
}(document)); 

function FBLogin(){ 
    FB.login(function(response){ 
     if(response.authResponse){ 
      window.location.href = "<?php echo $pageURL.$sign;?>option=fblogin"; 
     } 
    }, {scope: 'email'}); 
} 

     </script> 

क्या कोई जानता है कि यह कैसे काम कर रहा है? मैं क्या गलत कर रहा हूँ? किसी भी मदद की बहुत सराहना की है।

धन्यवाद।

अद्यतन:

मैं इस जवाब का उपयोग कर मेरी फाइल में कुछ पंक्तियाँ here

इस बदली गई बदला है: $ fbuser = $ फेसबुक> getUser();

  if ($fbuser) { 

       try { 

        $user_profile = $facebook->api('/me'); 

       } 

       catch (Exception $e) { 

        echo $e->getMessage(); 

        exit(); 

       } 

एक यह करने के लिए:

$fbuser = $facebook->getUser(); 

$photo_details = array('message' => 'my place'); 
$file='photos/my.jpg'; //Example image file 
$photo_details['image'] = '@' . realpath($file); 

if ($fbuser) { 
    try { 
    // We have a valid FB session, so we can use 'me' 
    $upload_photo = $facebook->api('/me/photos', 'post', $photo_details); 
    } catch (FacebookApiException $e) { 
    error_log($e); 
    } 

मैं अब पंजीकृत कर ली लेकिन वर्डप्रेस के अपने बहुत ही अजीब

उपयोगकर्ता नाम और उपनाम allways @facebook है: डी

तो मुझे लगता है इसे यहां चर नहीं मिल रहा है:

if (!isset($user_profile['email'])) $user_profile['email'] = $user_profile['id'] . '@facebook.com'; and just keeping @facebook instead without the `$user_profile['id']` 
+0

onClick के बजाय onclick प्रयास करें। – Ozan

+0

आपके उत्तर के लिए धन्यवाद, eyvallah, लेकिन जब मैं बटन पर क्लिक करता हूं तो कोई भाग्य समान नहीं होता है और कंसोल में कुछ भी त्रुटि नहीं होती है। – Gazi

+0

मुझे अभी कोड चलाने की कोई संभावना नहीं है लेकिन यह भी दायरे से बाहर हो सकती है। – Ozan

उत्तर

1

कृपया नीचे नमूना कोड पाएं। मैंने एक्सेस-टोकन उत्पन्न करने के लिए लॉगिन और PHP एसडीके के लिए जावास्क्रिप्ट एसडीके का उपयोग किया है। मुझे उम्मीद है कि यह आपके लिए काम करेगा।

** एचटीएमएल कोड :: **

<html> 

    <body> 

    <p><a href="#" onClick="logInWithFacebook()">Log In with the JavaScript SDK</a></p> 

    <script> 
    logInWithFacebook = function() { 
     FB.login(function(response) { 
     if (response.authResponse) { 
      alert('You are logged in &amp; cookie set!'); 
      location.href = "//localhost/facebook/testfb.php" 
      // Now you can redirect the user or do an AJAX request to 
      // a PHP script that grabs the signed request from the cookie. 
     } else { 
      alert('User cancelled login or did not fully authorize.'); 
     } 
     }); 
     return false; 
    }; 
    window.fbAsyncInit = function() { 
     FB.init({ 
     appId: 'app-id', 
     cookie: true, // This is important, it's not enabled by default 
     version: 'v2.9' 
     }); 
    }; 

    (function(d, s, id) { 
     var js, fjs = d.getElementsByTagName(s)[0]; 
     if (d.getElementById(id)) { 
     return; 
     } 
     js = d.createElement(s); 
     js.id = id; 
     js.src = "//connect.facebook.net/en_US/sdk.js"; 
     fjs.parentNode.insertBefore(js, fjs); 
    }(document, 'script', 'facebook-jssdk')); 
    </script> 
</body> 

</html> 

** पीएचपी कोड **

<?php 
require_once('Facebook/autoload.php'); 
# /js-login.php 
$fb = new Facebook\Facebook([ 
'app_id' => '{app-id}', 
'app_secret' => '{app-secret}', 
'default_graph_version' => 'v2.9', 
]); 

$helper = $fb->getJavaScriptHelper(); 


try { 
    $accessToken = $helper->getAccessToken(); 
} catch(Facebook\Exceptions\FacebookResponseException $e) { 
    // When Graph returns an error 
    echo 'Graph returned an error: ' . $e->getMessage(); 
    exit; 
} catch(Facebook\Exceptions\FacebookSDKException $e) { 
    // When validation fails or other local issues 
    echo 'Facebook SDK returned an error: ' . $e->getMessage(); 
    exit; 
} 


if (!isset($accessToken)) { 
    echo 'No cookie set or no OAuth data could be obtained from cookie.'; 
    exit; 
} 



// The OAuth 2.0 client handler helps us manage access tokens 
$oAuth2Client = $fb->getOAuth2Client(); 

// Get the access token metadata from /debug_token 
$tokenMetadata = $oAuth2Client->debugToken($accessToken); 


// Validation (these will throw FacebookSDKException's when they fail) 
$tokenMetadata->validateAppId('{app-id}'); // Replace {app-id} with your app id 
// If you know the user ID this access token belongs to, you can validate it here 
//$tokenMetadata->validateUserId('123'); 
$tokenMetadata->validateExpiration(); 

if (! $accessToken->isLongLived()) { 
    // Exchanges a short-lived access token for a long-lived one 
    try { 
    $accessToken = $oAuth2Client->getLongLivedAccessToken($accessToken); 
    } catch (Facebook\Exceptions\FacebookSDKException $e) { 
    echo "<p>Error getting long-lived access token: " . $helper->getMessage() . "</p>\n\n"; 
    exit; 
    } 

    echo '<h3>Long-lived</h3>'; 
    var_dump($accessToken->getValue()); 
} 

$_SESSION['fb_access_token'] = (string) $accessToken; 

try { 
    // Returns a `Facebook\FacebookResponse` object 
    $response = $fb->get('/me?fields=id,name,email', $accessToken->getValue()); 
} catch(Facebook\Exceptions\FacebookResponseException $e) { 
    echo 'Graph returned an error: ' . $e->getMessage(); 
    exit; 
} catch(Facebook\Exceptions\FacebookSDKException $e) { 
    echo 'Facebook SDK returned an error: ' . $e->getMessage(); 
    exit; 
} 

$user = $response->getGraphUser(); 

echo 'Name: ' . $user['name']; 
echo 'Email: ' . $user['email']; 

?> 
+0

आपके उत्तर के लिए धन्यवाद, लेकिन मेरे पास autoload.php नहीं है क्योंकि मैं केवल इस का उपयोग कर रहा हूं https://github.com/facebookarchive/facebook-php-sdk मैं गलत कर रहा हूं? – Gazi

+0

यहां एसडीके का लिंक है जिसका मैंने उपयोग किया है https://github.com/facebook/php-graph-sdk – BlueSuiter

संबंधित मुद्दे