首次尝试获取会话时,Facebook登录失败

时间:2016-10-20 07:44:58

标签: php facebook sdk facebook-php-sdk facebook-login

我在使用PHP SDK登录Facebook时出现问题。

我对会话变量有if else语句,因为我也使用此登录将用户信息存储到db,如name,email和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>"; 
}

1 个答案:

答案 0 :(得分:0)

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

相关问题