2016-10-20 3 views
0

PHP SDKを使用してFacebookのログインに問題があります。セッションを初めて取得しようとしたときにFacebookログインが失敗する

私はセッション変数のelse文も持っています。私はこのログインを使用して、名前、電子メール、およびUIDのようなユーザー情報をdbに保存します。

問題最初のログイン時にコードが実行され、「再度ログインしてください」というスクリプトを実行するセッションの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

私はまず変数$セッションが設定されていないと思います。しかし、リロードする前に$セッションはnullに設定されています。今度は、最初の試行ではなく、次回のリロード時にif文で取り上げられます。 –

+0

fbボタンでログインをクリックするだけで、ユーザーが同じことをやっているから初めて初めて認識できるようになったのは本当にわかりません。 @LarsMertens – Cisco1991

+0

$ sessionを設定する前に、このチェックが必要かどうかわかりません。 if(isset($ _SESSION)&& isset($ _SESSION ['fb_token'])) –

答えて

0

これを今すぐ閉じることができます。 FacebookのPHP SDKの最新バージョンを使用してすべてを修正しました。ありがとう!

関連する問題