2013-07-14 12 views
8

Sto utilizzando l'SDK JavaScript di Facebook per richiamare un Popup di accesso quando l'utente fa clic sul pulsante Accedi.Facebook API: accesso utilizzando JavaScript SDK quindi controllo dello stato di accesso con PHP

Il codice è, come Facebook fornisce nel doucmentation:

$(".loginButton").click(function(){ 
FB.login(function(response) { 
    FB.api('/me', function(response) { 
     console.log(response.id); 
     //User ID shows up so I can see that the user has accepted the app. 
    }); 
}); 

posso anche usare FB.getLoginStatus() per verificare che l'utente ha infatti registrato e accettato la domanda.

Tuttavia, ora mi piacerebbe eseguire una funzione con PHP. Per quanto ho capito, PHP ha $user a cui viene assegnato l'ID utente dopo un login riuscito.

Il problema è dopo l'accesso JS $user è ancora 0. Sono bloccato e non riesco a capire perché non assegnerà l'ID utente corretto per $user

Ecco la mia JS:

<script type="text/javascript"> 

     window.fbAsyncInit = function() { 
      FB.init({ 
       appId : '<?php echo $AppId; ?>', 
       status : true, // check login status 
       cookie : true, // enable cookies to allow the server to access the session 
       xfbml : true, 
       channelUrl : '<?php echo $ServerPath; ?>channel.php' // custom channel 
      }); 

    }; 


    //Get Login Status 
    function amILoggedIn(){ 
     var toreturn = ""; 
     FB.getLoginStatus(function(response) { 
      if (response.status === 'connected') { 
       window.userId = response.authResponse.userID; 
      toreturn = "GetLoginStatus: logged in" + " " + "<?php echo $user; ?>"; 
      } else { 
      toreturn = "GetLoginStatus: Logged Out"; 
      } 
      console.log(toreturn); 
     }); 


    }; 


    // Load the SDK asynchronously 
    (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/all.js"; 
     fjs.parentNode.insertBefore(js, fjs); 
     }(document, 'script', 'facebook-jssdk')); 

      var obj = { 
        method: 'feed', 
        link: 'http://www.google.com' 
       }; 


    $(".loginPopupButton").click(function(){ 
     FB.login(function(response) { 
      FB.api('/me', function(response) { //user-specific stuff 
       console.log(response.id); 
      }); 
     }); 

    }); 

    </script> 

Ed ecco il PHP:

<?php 
    include_once('fbapi/facebook.php'); 
    include_once('fbapi/Authenticated_User.php'); 
    include_once('config.php'); 


    // Create our Application instance. 
    $facebook = new Facebook(array(
        'appId' => $AppId, 
        'secret' => $AppSecret 
       )); 
    //Facebook Authentication part 
    $user = $facebook->getUser(); 


    $perms = "manage_pages"; 
    if(isset($_GET['backlink'])) 
     $redirectUrl = urldecode($_GET['backlink']); 
    else 
     $redirectUrl = $fullserverpath; 

    $cancelUrl = $ServerPath."index.php?page=loginWFb"; 

    //AA - where to go to get FB popup.  
    $loginUrl = $facebook->getLoginUrl(
      array(
       'scope' => $perms, 
       'redirect_uri' => $redirectUrl, 
       'cancel_uri' => $cancelUrl 
      ) 
    ); 



    //AA- Defining that a powerUSER is someone who's logged in 
    if(isset($user)){ 
     $_SESSION['loggedIn'] = $user; 

    } 

    ?> 
+0

Devi passare th e accedere token da JS a PHP (e utilizzarlo nella libreria PHP). –

risposta

4

L'accesso con l'SDK JS memorizza i dati di accesso nei cookie di Facebook mentre l'accesso con l'SDK PHP memorizza i dati nella sessione PHP. Quindi, se si accede con l'SDK JS, l'SDK PHP non ne sarà a conoscenza.

per accedere con l'SDK PHP utilizzando i dati JS SDK, è necessario chiamare la tua pagina PHP con la richiesta firmata nel parametro query:

FB.getLoginStatus(function(response) { 
    if (response.status === 'connected') { 
     // Full redirect or ajax request according to your needs 
     window.location.href = 'login.php?signed_request='+response.authResponse.signedRequest; 
    } 
}); 

Poi $facebook->getUser() vi darà l'id utente in PHP codice.

+2

_ "Quindi, se si accede con l'SDK JS, l'SDK PHP non ne sarà a conoscenza." _ - i documenti ufficiali [elemosina a differire] (https://developers.facebook.com/docs/php/gettingstarted/ # integrazione) ... – CBroe

+0

Hai ragione, non lo sapevo. Proporrò quindi una risposta più semplice. – Ale

0

Quando si inizializza l'oggetto di Facebook in PHP, provare a impostare il sharedSession parametro true:

$facebook = new Facebook(array(
    'appId'   => $AppId, 
    'secret'  => $AppSecret, 
    'sharedSession' => true 
)); 
0

si possono trovare ad esempio a lavorare da qui

http://liferaypower.blogspot.com/2013/10/index.html

codice di esempio

FB.init({ 
    appId: '490986011016528', // App ID 

    channelUrl: 'http://localhost:8000/', // Channel File 

    status: true, // check login status 

    cookie: true, // enable cookies to allow the server to access session 

    xfbml: true // parse XFBML 

}); 

FB.Event.subscribe('auth.authResponseChange', function(response) 
{ 

    if (response.status === 'connected') 
    { 

     document.getElementById("message").innerHTML += "ConnectedtoFacebook"; 
} 
else if (response.status === 'not_authorized') 
{ 

document.getElementById("message").innerHTML += "<br>Failed to Connect"; 
    //FAILED 

} 

else 
    { 

    document.getElementById("message").innerHTML += "<br>Logged Out"; 
     //UNKNOWN ERROR 

    } 
}); 
Problemi correlati