0

由于 Facebook 在过去一年中所做的所有更改,很多事情都发生了变化。网上有一些解决方案,但它们不再起作用。(像这样:使用 PHP 或 JavaScript Facebook SDK,我怎样才能让用户登录到我的网站?

我已经在我的网站上使用 PHP facebook SDK 实现了 facebook 连接。问题在于已经批准我的应用程序并且也登录到他们的 Facebook 的用户。在这种情况下,我希望他们自动登录,而无需再次按下连接按钮。我想有一种方法可以使用 php+js 来做到这一点,但我找不到方法,相信我我尝试了几件事。问题是php用户检查

$user  = $facebook->getUser(); 

不承认 facebook 会话,我想也许我可以用 JS 触发它。所以我厌倦了在 JS 中为页面添加此代码,并且 ALRETS 正在工作,说用户已连接但没有会话传递给 PHP,因此 PHP SDK 无法识别用户已连接:

<div id="fb-root"></div>
    <script>
      window.fbAsyncInit = function() {
        FB.init({
              appId  : '<?=FACEBOOK_APP_ID?>',
              status : true, // 
              cookie : true, // 
              xfbml  : true, //
              oauth  : true
        });

      // Additional initialization code here
 //--------> this isn't need to work its only a check
FB.getLoginStatus( function(response) {
    //console.log(response);
    if (response.status === 'connected') {
        var accessToken = response.authResponse.accessToken;
        alert(accessToken);
    } else if (response.status === 'not_authorized') {
        //login function
    } else {
        //login function
    }
}, true);

FB.Event.subscribe('auth.authResponseChange', function(response) {
    //console.log('The status of the session changed to: '+response.status);
    alert(response.status);
});

 //--------> END OF CHECK!!
      };
      // Load the SDK Asynchronously
      (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/<?=$fb_api_lang?>/all.js#xfbml=1";
         ref.parentNode.insertBefore(js, ref);
       }(document));
    </script>

如果有人找到解决此问题的方法并可以分享,将不胜感激。

4

2 回答 2

1

问题是 php 用户检查$user = $facebook->getUser();无法识别 facebook 会话

当然它不能——因为在服务器端它只能访问为您的域设置的 cookie。但是如果用户不在该域上并与 Facebook 交互,Facebook 就无法为您的域设置 cookie。

我想也许我可以用 JS 来触发它。

只需嵌入 JavaScript SDK,对其进行初始化并设置cookie: true参数。这将使 JS SDK 在您的域下设置一个 cookie,PHP 可以在下一个请求时读取该 cookie 。

如果您想“立即”识别返回用户,那么您必须检查客户端,并在满足适当条件时重新加载您的页面:JS SDK 识别返回用户(FB.getLoginStatus),但 PHP 没有识别他然而(让你的 PHP 代码设置一个变量/标志,你的 JS 可以评估)——然后通过 JS 重新加载页面,以便 PHP 可以读取刚刚由客户端 JS 设置的 cookie。

于 2012-07-26T10:05:30.160 回答
0

你的表现是否正确:

$facebook = new Facebook(array(
    'appId'  => $app_id,
    'secret' => $app_secret,
    'cookie' => true
));

在调用此方法之前?你用的是同一个域吗?

于 2012-07-26T09:39:36.957 回答