2011-11-30 266 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

相关问题