2011-09-27 2 views
0

바라건대 이것은 빠르고 쉽습니다.Facebook PHP SDK - 새 브라우저 세션 중에 다시 인증해야합니까?

session_start(); 

include("facebook.php"); 

$facebook = new Facebook(array(
'appId'=>'xxxxx50274xxxxx', 
'secret'=>'xxxxxb932d62fbc6287feb18e5exxxxx', 
'cookie'=>true 
)); 

$fbuser = $facebook->getUser(); 

if (empty($fbuser)){ 
    $fbloginurl=$facebook->getLoginURL(); 
    echo "<html><body><a href='$fbloginurl'>Click</a></body></html> 
} else { 
    die("Authenticated"); 
} 

이 예에서 FB 계정에 액세스 할 수있는 권한을 앱에 부여하는 링크를 처음 클릭하면 모든 것이 정상적으로 작동합니다. 페이지를 새로 고칠 수 있으며 인증 된 확인 메시지가 표시됩니다.

그러나 브라우저를 다시 시작할 때마다 (새 세션 시작) 앱을 자동으로 인증하지 않으므로 링크를 다시 클릭해야합니다. 물론 링크를 클릭하자마자 바로 소스 페이지로 리다이렉션되어 "인증 된"확인 메시지가 나타납니다.

새 브라우저 세션 중에 인증 링크를 클릭하여 자동으로 인증 할 필요가없는 방법이 있습니까? PHP 헤더 지시문없이이 작업을 수행해야합니다. 사용자가 직접 클릭하여 응용 프로그램에 대한 권한을 부여하기를 원하기 때문입니다.

FB 로그인은 계속됩니다 ("로그인 상태 유지"옵션이 선택되어 있음).

도움을 주셔서 감사합니다.

답변

0

내 코드와 비교하면 볼 수있는 유일한 차이점은 $ fbuser가 유효한지 확인하는 것입니다. 그러면 로그인 화면으로 보내지 않을 것입니다. top.location.href도 사용하고 있습니다.

// Login or logout url will be needed depending on current user state. 
if ($fbuser) { 
     $logoutUrl = $facebook->getLogoutUrl(); 
     } 
else { 
    $loginUrl = $facebook->getLoginUrl(array('scope' => 'publish_actions', 'canvas' => 1, 'fbconnect' => 0, 'redirect_uri'=>config_item('facebook_url').$pf)); 
    echo "<html><body><script> top.location.href='" . $loginUrl . "'</script></body></html>"; 
    exit(0); 
    } 

희망이 있습니다.

+0

John, 나는 같은 "문제"가 있다고 생각하지만 JS 리디렉션을 사용하여 해결합니다. 이렇게하면 최종 사용자에게는 사실상 보이지 않습니다. 그러나, 제 경우에는 자동 리디렉션을 명시 적으로 피하려고합니다. –

1

시나리오를 올바르게 이해하고 있다면 (iframe 앱이 맞지 않습니까?) 브라우저를 닫을 때 웹 사이트 세션 쿠키가 손실 될 수 있습니다. 쿠키가 사라지면 사용자를 서버 측 코드로 식별 할 수 없으므로 사용자가 이전에 앱을 승인했는지 알 수 없습니다.

사용자를 지속적으로 식별하거나 적어도 이미 권한을 부여 받았음을 식별하는 방법을 찾아야합니다. 가장 간단한 방법은 사용자가 처음 인증을 받으면 자신의 (영구) 쿠키를 설정하는 것입니다. 그런 다음 세션 쿠키가 손실 될 때마다 영구 쿠키가 존재하는지 확인하고, 쿠키가 있으면 페이스 북으로 PHP 리디렉션을 수행하십시오 (사용자에게는 보이지 않습니다). 쿠키가 없으면 지금하고있는 것처럼 HTML 링크를 사용자에게 제시하십시오.

+0

그게 좋은 해결 방법입니다 - 고마워요! –