Facebook API: войдите в систему с помощью JavaScript SDK, затем проверьте состояние входа в PHP

Я использую SDK для JavaScript Google, чтобы открыть всплывающее окно входа, когда пользователь нажимает кнопку «Вход».

Код, так как Facebook предоставляет в закате:

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

Я также могу использовать FB.getLoginStatus() чтобы проверить, действительно ли пользователь FB.getLoginStatus() вход и принял приложение.

Однако теперь я хотел бы выполнить функцию с PHP. Насколько я понимаю, PHP имеет $user которому присвоен UserID после успешного входа в систему.

Проблема заключается в том, что после того, как пользователь JS Login $user по-прежнему 0 . Я застрял, и я не могу понять, почему он не назначит правильный идентификатор $user

Вот мой 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> 

И вот 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; } ?> 

Вход с помощью JS SDK хранит данные входа в файлы cookie Facebook, а вход в PHP SDK хранит данные в сеансе PHP. Поэтому, если вы зарегистрируетесь с помощью JS SDK, PHP SDK не будет знать об этом.

Чтобы войти в систему с помощью SDK PHP с использованием данных JS SDK, вам нужно вызвать свою страницу PHP с подписанным запросом в параметре запроса:

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

Тогда $facebook->getUser() предоставит вам идентификатор пользователя в вашем PHP-коде.

При инициализации объекта Facebook в PHP попробуйте установить для параметра sharedSession значение true :

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

вы можете найти рабочий пример здесь

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

Образец кода

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