2014-09-22 1 views
0

Facebook PHP API 4.0을 사용 중이며 세션 변수를 설정하려고하므로 사용자의 Facebook 데이터를 사용할 수 있습니다.Facebook Connect PHP 세션 변수가 설정되지 않습니다.

앱 및 Facebook 승인 페이지가 모두 예상대로 작동했지만 $ 세션 변수는 내가 시도한 내용과 상관없이 설정되지 않은 상태로 남아 있습니다. 나는 성공에 대한 비슷한 질문에서 스택에 대한 해결책을 찾으려고 노력했다. 이것은 내가 사용하고있는 코드입니다.

if (isset($session)) { 
    echo 'Session var is finally being seen'; 
} else { 
    // show login url 
    echo '<a href="' . $helper->getLoginUrl(array()) . '">Login</a>'; 
} 

경우 :

session_start(); 


//start fb login stuff 
require_once($config['basedir'].'/Facebook/FacebookSession.php'); 
require_once($config['basedir'].'/Facebook/FacebookRedirectLoginHelper.php'); 
require_once($config['basedir'].'/Facebook/FacebookRequest.php'); 
require_once($config['basedir'].'/Facebook/FacebookResponse.php'); 
require_once($config['basedir'].'/Facebook/FacebookSDKException.php'); 
require_once($config['basedir'].'/Facebook/FacebookRequestException.php'); 
require_once($config['basedir'].'/Facebook/FacebookAuthorizationException.php'); 
require_once($config['basedir'].'/Facebook/GraphObject.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; 

// init app with app id (APPID) and secret (SECRET) 
FacebookSession::setDefaultApplication($fb_app, $fb_secret); 

$helper = new FacebookRedirectLoginHelper($config['baseurl']); 

try { 
    $session = $helper->getSessionFromRedirect(); 
} catch(FacebookRequestException $ex) { 
    // When Facebook returns an error 
    echo $ex; 
} catch(\Exception $ex) { 
    // When validation fails or other local issues 
    echo $ex; 
} 
if ($session) { 
    echo 'Session var is finally being seen'; 
} 
//end Facebook login stuff 
+0

그렇다면 예외는 무엇입니까? 코드에서 우리는 예외가 발생했다는 것을 무시한다는 것을 알 수 있습니다. – zerkms

+0

워크 플로 란 무엇입니까? 사용자가 귀하에게 리디렉션 된 페이지입니까? 예상 결과를 얻으려면 정확히 무엇을해야합니까? – zerkms

+0

사용자는 Facebook을 통해 앱을 승인해야하며 위의 코드가 포함 된 색인 페이지로 리디렉션됩니다. 예. 로그인 페이지에서 인덱스 페이지로 리다이렉트되며 인덱스 페이지에는'require_once ('config.php');가 포함 된 설정 페이지가 있으며이 설정 페이지는 사용자가 페이스 북을 통해 로그인했는지 확인하는 위의 코드를 가지고있다 . – JimmyBanks

답변

1

$session은 당신이 사용자가 로그인하지 않기 때문에 해제 남아 당신이 좋아하는 뭔가 코드의 마지막 부분을 수정해야 $session이 설정되어 있지 않으면 코드가 사용자에게 로그인하도록 요청합니다. 사용자가 로그인 한 후 $helper->getSessionFromRedirect(); 코드 부분을 실행하고 $session을 설정해야합니다. See my tutorial on how to tackle this.


편집는 :

다른 페이지에 사용자가 로그인하는 경우, 당신은 $helper = new FacebookRedirectLoginHelper('{your-url}');이 두 페이지에서 동일한 지 확인해야합니다. API가 다르면 redirect_uri mismatch과 관련된 API에서 예외가 발생합니다.

+0

별도의 로그인 페이지에있는 코드이므로 로그인하지 않았습니다. 사용자가 로그인했음을 보증합니다 (페이스 북 승인 프로세스 등을 거쳤습니다). 그리고 위에서 지정한대로 로그인을 테스트에 포함 시켰습니다. 페이지도 마찬가지로 문제가 있습니다. – JimmyBanks

+0

아, 테스트 페이지에 로그인 링크가 반복적으로 나타납니다. – JimmyBanks

+0

그게 효과가있었습니다. 고맙습니다! Facebook Link API를 사용하여 사용자가 이전에 Facebook을 사용하여 로그인 링크를 사용할 필요없이 로그인했는지 확인할 수 있다는 인상을 받았습니다. 그렇지 않은 것입니까? – JimmyBanks