2010-03-03 1 views
1

나는 가능한 한 적게 일어나고 있지만 여전히 모든 관련 코드를 제공하려고 노력할 것입니다. 차이는 없어야하지만 Zend Framework를 사용하고 있습니다. 이 코드는 사용자가 로그인하지 않은 경우, 그것은 PreDispatch 컨트롤러 플러그인에서 발사 실행합니다. 그들은 로그인하지 않은 경우 지금이 위의 코드는 호출Facebook Connect 및 공식 PHP API를 사용하여 사용자 로그 아웃에 실패했습니다.

Zend_Loader::loadClass('Users'); 
$users = new Users(Zend_Registry::get('dbAdapter')); 
if($users->is_facebook_user()) 
{ 
    $result = $users->login_facebook_user(); 

    if($result == 'success') 
     $role = $users->role_id; 
} 

그것은이 확인하고이 있는지 확인하기 위해 수행 Facebook에 로그인했습니다.

public function is_facebook_user() 
{ 
    $this->fb_userid = $this->fb->get_loggedin_user(); 

    if($this->fb_userid != '') 
    { 
     $this->load_user_by_facebook_id($this->fb_userid); 
     return true; 
    } 
    else 
     return false; 
} 

$fb 변수 내가 페이스 북에서 다운로드 공식 페이스 북 PHP의 API 클래스입니다 : 여기

는 is_facebook_user() 방법이다. 이 방법은 기본적으로 Facebook 사용자 ID를 반환합니다. 그런 다음 데이터베이스에서 사용자 정보를 가져 오는 메소드를 호출합니다. 첫 번째 코드 블록을 다시 보면 해당 사용자를 로그인하는 방법을 호출 할 수 있습니다.

이제 피들러를 사용하여 트래픽을 보면 다음 일련의 이벤트가 표시됩니다. 1. 그러면 로그 아웃 URL이 호출되어 Zend_Auth::getInstance()->clearIdentity(); 2.이 로그는 기본적으로 사이트로 리디렉션되고 사용자를 로그 아웃하는 Facebook 로그 아웃 메소드를 호출합니다. 3. 그런 다음 페이스 북 로그 아웃 메소드 으로 전달되는 리턴 URL로 리다이렉트합니다. 4. 내 사이트에서 다시 조회 될 때 로그 아웃되므로 get_loggedin_user를 다시 호출합니다.

여기에 문제가 있습니다. 나는 get_loggedin_user이 방법

$this->fb_userid = $this->fb->get_loggedin_user(); 

의 결과입니다 로그인 한 사용자 비를 반환 볼 수 있지만 내가 다시 사용자 ID를 얻는다. 그렇다면이 코드를 호출하기 전에 null로 설정하더라도 코드에서이 ID를 얻을 수 있습니다. 따라서 코드에 여전히있을 수있는 방법이 없으며 사용자에게 null을 반환하는 트래픽을보아야합니다. id,하지만 어떻게 든 사용자 ID를 얻습니다.

답변

0
<?php 

define('YOUR_APP_ID', '219415891407832'); 
define('YOUR_APP_SECRET', '44b22aeb3404ff5918cb58333532d22b'); 


function get_facebook_cookie($app_id, $app_secret) { 
    $args = array(); 
    parse_str(trim($_COOKIE['fbs_' . $app_id], '\\"'), $args); 

    ksort($args); 
    $payload = ''; 
    foreach ($args as $key => $value) { 
    if ($key != 'sig') { 
     $payload .= $key . '=' . $value; 
    } 
    } 
    if (md5($payload . $app_secret) != $args['sig']) { 
    return null; 
    } 
    return $args; 
} 

$cookie = get_facebook_cookie(YOUR_APP_ID, YOUR_APP_SECRET); 
echo "<pre/>"; 
/*print_r($_COOKIE); 

print_r($cookie);*/ 
$user = json_decode(file_get_contents('https://graph.facebook.com/me?access_token=' . $cookie['access_token'])); 

$photo = json_decode(file_get_contents('https://graph.facebook.com/100000439661780/albums?access_token=' . $cookie['access_token'])); 

echo "<pre/>"; 
print_r($photo); 
?> 
<img src="https://graph.facebook.com/ureshpatel5/picture" height="200" width="200" /> 
<html> 
    <body> 
    <?php 
    $albums = $facebook->api('/me/albums'); 
print_r($albums); 
foreach($albums['data'] as $album) 
{ 
     // get all photos for album 
     $photos = $facebook->api("/{189346844423303_46487}/photos"); 

     foreach($photos['data'] as $photo) 
     { 
       echo "<img src='{$photo['source']}' />", "<br />"; 
     } 
} 
    ?> 
    <?php if ($cookie) { ?> 
     Welcome <?= $user->name ?> 
    <?php } else { ?> 
     <fb:login-button></fb:login-button> 
    <?php } ?> 

    <?php 
     echo $photo->source; 
    ?> 
    <div id="fb-root"></div> 
    <script src="http://connect.facebook.net/en_US/all.js"></script> 
    <script> 
     FB.init({appId: '<?= YOUR_APP_ID ?>', status: true, 
       cookie: true, xfbml: true}); 
     FB.Event.subscribe('auth.login', function(response) { 
     window.location.reload(); 

     }); 
      </script> 
    </body> 
</html> 
관련 문제