Php facebook sdk does not create user in wordpress

Edited Question:

I am trying to create a facebook login plugin on my Wordpress site using this sdk

When I press the facebook button to login or register, it opens a small window through facebook, which says that it continues, but after that it does not create a user in the wordpress database and does not break the Wordpress footer, so it shows An active access token must be used to query information about the current user. messagge under login forms after page refresh.

My complete php code to login to facebook:

  <?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; } } } ?> 

here is the javascript in the above code.

  <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> 

Does anyone know how to make it work? What am I doing wrong? Any help is greatly appreciated.

Thankyou.

UPDATE:

I changed some lines in my file using this answer here

Changed: $ fbuser = $ facebook-> getUser ();

  if ($fbuser) { try { $user_profile = $facebook->api('/me'); } catch (Exception $e) { echo $e->getMessage(); exit(); } 

to that:

 $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); } 

I registered now, but its very strange

username and nickname wordpress is allways @facebook: D

So, I think it does not get the variables here:

 if (!isset($user_profile['email'])) $user_profile['email'] = $user_profile['id'] . '@facebook.com'; and just keeping @facebook instead without the `$user_profile['id']` 
+7
javascript php wordpress facebook-login
Apr 26 '17 at 11:08
source share
1 answer

Please find the sample code below. I used the JavaScript SDK to login and the PHP SDK to create an access token. Hope this works for you.

** HTML Code :: **

  <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  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 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 code **

 <?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 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']; ?> 
+1
Apr 29 '17 at 13:18
source share



All Articles