0

我正在使用 php sdk 将用户登录到网站。另外我正在使用redirect_uri 重定向到login.php 我正在使用用户ID 设置cookie。然后我正在检查 cookie 是否存在我正在使用 header 函数来引导用户回到 main.php

<?php   if(isset($_COOKIE['id']) == false){

        require_once('scripts/facebook.php');
        $config = array('appId' => 'xxx','secret' => 'xxx');
        $params = array('scope' => 'email,offline_access,user_birthday', 'redirect_uri' => 'http://www.xxx.com/login.php');
        $facebook = new Facebook($config);
        $user = $facebook->getUser(); 

        if($user) {

            try {

            $user_profile = $facebook->api('/me','GET');
        $userid = $user_profile['username'];



                //insert cookie
                $expire = time() + 31556926;
                $cookie_id = $user_profile['username'];
                setcookie("id", $cookie_id, $expire);
                header('Location: main.php');



          } catch(FacebookApiException $e) {
                            $login_url = $facebook->getLoginUrl($params);
                            echo '<img src="assets/login.png"><br>';
                            echo '<a href="' . $login_url . '"><img src="assets/facebook_login.png"></a>';
                            error_log($e->getType());
                            error_log($e->getMessage());
          }   
        } else {

            $login_url = $facebook->getLoginUrl($params);
            echo '<img src="assets/login.png"><br>';
            echo '<a href="' . $login_url . '"><img src="assets/facebook_login.png"></a>';
        }//end facebook
        }else{
            //if cookie id is set
            header('Location: main.php');
            }
    ?>

现在,问题是当用户对应用程序进行身份验证时,它正在重定向到登录页面。这意味着 php 页面没有被刷新。我怎么解决这个问题 ?更新:如果用户刷新页面或再次单击登录,他将自动重定向到 main 吗?

4

1 回答 1

1

我在这里有同样的问题。我通过 Facebook PHP 函数 getLoginURL() 将网站用户重定向到使用 Facebook 网站登录。一旦用户进入 Facebook 的登录屏幕并被重定向回我的网站,页面就不会刷新。这意味着我无法为当前登录的用户更新页面显示。这似乎有点愚蠢 - 因为我认为这将是显而易见的“默认”事情。

如果我/您添加客户端 Facebook JS 和根 div,则该过程适用于 Facebook JS 驱动的页面重新加载 - 但是基于拉入客户端 Facebook JS 的重新加载是我可以不依赖的依赖项 - 它只是增加臃肿并使事情复杂化。任何对如何解决此问题有任何其他想法的人。

客户端 JS 放置在您的结束 body 标记之前:

<div id="fb-root"></div>
<script>
  window.fbAsyncInit = function() {
    FB.init({
      appId: '<?php echo $facebook->getAppID() ?>',
      cookie: true,
      xfbml: true,
      oauth: true
    });
    FB.Event.subscribe('auth.login', function(response) {
      window.location.reload();
    });
    FB.Event.subscribe('auth.logout', function(response) {
      window.location.reload();
    });
  };
  (function() {
    var e = document.createElement('script'); e.async = true;
    e.src = document.location.protocol +
      '//connect.facebook.net/en_US/all.js';
    document.getElementById('fb-root').appendChild(e);
  }());
</script>
于 2012-07-02T20:05:52.253 回答