Facebook登录在第一次尝试获取会话时失败

问题描述:

我在使用PHP SDK的Facebook登录时遇到了问题。Facebook登录在第一次尝试获取会话时失败

我有if else语句的会话变量,因为我也使用这个登录名将用户信息存储到db,比如名字,电子邮件和uid。

问题我第一次登录时,代码将始终为执行脚本的会话执行ELSE语句,该脚本显示“请再次尝试登录”,然后当用户尝试再次登录时,它会成功的。我需要帮助解决这个问题,以便在第一次尝试时识别用户。

href="example.org/fb-redirect.php" 

感谢:

而且,我的登录按钮被通过访问!

<?php 

include('debug.php'); 
require_once(dirname(__FILE__)."/templates/initialize.inc"); 

session_start(); 
$curtimestamp = date('Y-m-d H:i:s'); // added in v4.0.0 
require_once 'fb/autoload.php';  
require_once('fb/src/Facebook/GraphUser.php'); 
use Facebook\FacebookSession; 
use Facebook\FacebookRedirectLoginHelper; 
use Facebook\FacebookRequest; use Facebook\FacebookResponse; 
use Facebook\FacebookSDKException; 
use Facebook\FacebookRequestException; 
use Facebook\FacebookAuthorizationException; 
use Facebook\GraphObject; 
use Facebook\GraphUser; 
use Facebook\Entities\AccessToken; 
use Facebook\HttpClients\FacebookCurlHttpClient; 
use Facebook\HttpClients\FacebookHttpable; 

function authoLogin($userLogin){  
$global_connection = db_connect(); 
$userdata = db_getrow("select * from user where user_login like '".$userLogin."'", $global_connection);  
db_query("update user set user_loginerror=0 where user_id='".$userdata['user_id']."'", $global_connection);  
util_setsessionvar('usertype',$userdata['usertype_id']);  
util_setsessionvar('userid',$userdata['user_id']); 
util_setsessionvar('userlogin',$userdata['user_login']);  
util_setsessionvar('username',$userdata['user_name']); 
} 
// init app with app id and secret 
FacebookSession::setDefaultApplication('appid','secret'); 
// login helper with redirect_uri 

$helper = new FacebookRedirectLoginHelper('http://example.org/fb-redirect.php'); 
if (isset($_SESSION) && isset($_SESSION['fb_token'])) { 
// create new session from saved access_token 
$session = new FacebookSession($_SESSION['fb_token']); 

// validate the access_token to make sure it's still valid 
try { 
    if (!$session->validate()) { 
     $session = null; 
    } 
} catch (Exception $e) { 
    // catch any exceptions 
    $session = null; 
    } 
} 
if (!isset($session) || $session === null) { 
// no session exists 
    try { 
    $session = $helper->getSessionFromRedirect(); 
} catch(FacebookRequestException $ex) { 
    // When Facebook returns an error 
    // handle this better in production code 
    print_r($ex); 
} catch(Exception $ex) { 
    // When validation fails or other local issues 
    // handle this better in production code 
    print_r($ex); 
    }  

} 
// see if we have a session 
// see if we have a session 
if (isset($session)) { 
//store the token in the php session 
// graph api request for user data 
$request = new FacebookRequest($session, 'GET', '/me'); 
$response = $request->execute(); 
// get response 
$graphObject = $response->getGraphObject(GraphUser::classname()); 
     $fbid = $graphObject->getProperty('id');    // To Get Facebook ID 
     $fbfullname = $graphObject->getProperty('name'); // To Get Facebook full name 
     $femail = $graphObject->getProperty('email'); // To Get Facebook email ID   $fgetid=$graphObject->getID();  //get image source from facebook account 
     $getimgsrc='https://graph.facebook.com/'.$fgetid.'/picture?width=200'; 

     /* ---- Session Variables -----*/ 
     $_SESSION['FBID'] = $fbid;   
     $_SESSION['FULLNAME'] = $fbfullname; 
     $_SESSION['EMAIL'] = $femail;  $_SESSION['PROFILE_PICTURE']=$getimgsrc;  $_SESSION ['form_data']['return_url'] = $_SERVER['HTTP_REFERRER']; 


    if statement { 
     //save to database 
     } else if statement{  
} 
    /* ---- header location after session ----*/ 

}else{ 
echo "<script> alert('Please try to login again'); window.location.href='index.php'; </script>"; 
} 
+0

我猜首先尝试没有变量$ session集。但在重新加载之前,$ session被设置为null。现在它会被你的if语句在下次重新载入时拾取,而不是第一次尝试。 –

+0

我无法弄清楚自用户刚刚做了同样的事情后,如何才能让它第一次识别,只需用fb按钮单击登录即可。 @LarsMertens – Cisco1991

+0

不确定在设置$ session之前你需要检查。 if(isset($ _SESSION)&& isset($ _SESSION ['fb_token'])) –

现在可以关闭了。通过使用Facebook的PHP SDK的最新版本修复了一切。谢谢!