2011-11-30 256 views
0

我正在使用php facebook類並在我的頁面上放置登錄按鈕$f->getLoginUrl(),問題是此按鈕在第一次點擊時無法使用。它做它應該的並返回到我的網站,但$f->getUser()是空的。 奇怪的是,當我第二次點擊按鈕,然後它完美地工作。Facebook登錄按鈕僅適用於第二次點擊

$facebook = new Facebook(array(
    'appId' => '25317735807xxxx', 
    'secret' => '37e5dd05657f2cc2a1bdc9974985xxxx', 
    'redirURL' => 'http://mysite.com/', 
)); 

$fb_login = '<a href="' . $facebook->getLoginUrl() . '" class="fb-login-button"><img src="img/fb-login-button.png" border="0" /></a>'; 

$fb_user = $facebook->getUser(); 

$user_level = 4; 
if($page_access[$glob['pag']]['session']) 
{ 
    session_start(); 
} 

if ($_SESSION[U_ID]) 
{ 
    $user_level = $_SESSION['access_level']; 
    require_once("classes/cls_auth.php"); 
    $auth = new auth(); 
    $show_connect_alert = $auth->check_connection(); 
    if($glob['pag'] == 'register' && $_SESSION[U_ID]) 
    { 
     $glob['pag'] = 'profile'; 
    } 
} 
else 
{ 
    //check if fb session exists 
    if ($fb_user) 
    { 
     try 
     { 
      $db = new mysql_db(); 
      $db->query("SELECT email, password FROM member WHERE fb_id = $fb_user"); 
      if ($db->move_next()) 
      { 
       $glob['email'] = $db->f('email'); 
       $glob['password'] = $db->f('password'); 
       require_once("classes/cls_auth.php"); 
       $auth = new auth(); 
       $auth->login($glob); 
      } 
      else 
      { 
       $user_profile = $facebook->api('/me'); 
       $glob['pag'] = "fboptions"; 
      } 
     } 
     catch (FacebookApiException $e) 
     { 
      $glob['fb-error'] = $e; 
      unset($fb_user); 
      $user_level = 4; 
     } 
    } 
    else 
    { 
     // check login cookie 
     if(isset($_COOKIE['stagescan'])) 
     { 
      list($arr['email'], $arr['password']) = explode(",", $_COOKIE['stagescan']); 
      require_once("classes/cls_auth.php"); 
      $auth = new auth(); 
      if(!$auth->login($arr)) 
      { 
       setcookie('stagescan', "", time()-3600, "http://mysite.com/"); 
      } 
      else 
      { 
       $glob['debug'] = "User logged in from cookie"; 
      } 
     } 
     else 
     { 
      $user_level = 4; 
     } 
    } 
} 
+3

你能發佈完整的腳本嗎?聽起來像你有一些不正確的邏輯排序 – kieran

回答

1

您是否在JavaScript部分中添加了標準的FB處理程序?他們應該重新加載頁面並設置一些cookie以使facebook API正常工作...

<!-- FACEBOOK JAVASCRIPT HANDLER START --> 
<div id="fb-root"></div> 
<script> 
    window.fbAsyncInit = function() { 
     FB.init({ 
      appId: '%CONTEST_FACEBOOKAPPID%', 
      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> 
<!-- FACEBOOK JAVASCRIPT HANDLER END --> 
+0

你確定這是需要與PHP的Facebook SDK?我在文檔中沒有看到這一點。 – slash197

+0

我從來沒有能夠得到它的工作,除非我也雙擊,然後用我的同事發現的重新加載器,一切都開始順利,我們停止了這個問題。請注意,它可能不是正確的答案,但它是爲我... –

+0

這固定它爲我(似乎我需要'cookie:true,'線,這是祕密的醬)。另請參閱https://stackoverflow.com/a/13964442/32453 – rogerdpack

相關問題