2012-06-30 7 views
0

나는 php sdk를 사용하여 사용자를 웹 사이트에 로그인합니다. 또한 redirect_uri를 사용하여 login.php로 리디렉션합니다. 사용자 ID로 쿠키를 설정하고 있습니다. 쿠키가 지금php-Facebook 등록 후 리디렉션?

<?php if(isset($_COOKIE['id']) == false){ 

     require_once('scripts/facebook.php'); 
     $config = array('appId' => 'xxx','secret' => 'xxx'); 
     $params = array('scope' => 'email,offline_access,user_birthday', 'redirect_uri' => 'http://www.xxx.com/login.php'); 
     $facebook = new Facebook($config); 
     $user = $facebook->getUser(); 

     if($user) { 

      try { 

      $user_profile = $facebook->api('/me','GET'); 
     $userid = $user_profile['username']; 



       //insert cookie 
       $expire = time() + 31556926; 
       $cookie_id = $user_profile['username']; 
       setcookie("id", $cookie_id, $expire); 
       header('Location: main.php'); 



      } catch(FacebookApiException $e) { 
          $login_url = $facebook->getLoginUrl($params); 
          echo '<img src="assets/login.png"><br>'; 
          echo '<a href="' . $login_url . '"><img src="assets/facebook_login.png"></a>'; 
          error_log($e->getType()); 
          error_log($e->getMessage()); 
      } 
     } else { 

      $login_url = $facebook->getLoginUrl($params); 
      echo '<img src="assets/login.png"><br>'; 
      echo '<a href="' . $login_url . '"><img src="assets/facebook_login.png"></a>'; 
     }//end facebook 
     }else{ 
      //if cookie id is set 
      header('Location: main.php'); 
      } 
    ?> 

를 main.php 다시 사용자를 dircet하기 위해 헤더 기능을 사용하고있는 경우 그럼 난 확인하고, 문제는 사용자가 응용 프로그램을 인증 할 때, 그것은 로그인 리디렉션입니다 페이지. 이것은 PHP 페이지가 새로 고쳐지지 않는다는 것을 의미합니다. 이 문제를 어떻게 해결할 수 있습니까? 업데이트 : 사용자가 페이지를 새로 고침하거나 다시 로그인을 클릭하면 자동으로 메인으로 리디렉션됩니까?

+0

당신이 authenication 별도의 창을 열고 있습니까? – Kristian

+0

아니요, 같은 창을 사용하고 있습니다. – user1481850

+0

좋아요, 그러면 어떤 PHP 페이지가 새로 고침되지 않습니까? – Kristian

답변

1

여기에도 같은 문제가 있습니다. 페이스 북 PHP 함수 getLoginURL()을 통해 Facebook 사이트를 사용하여 웹 사이트 사용자를 로그인하도록 리디렉션합니다. 사용자가 Facebook에 로그인하여 내 사이트로 리디렉션되면 페이지가 새로 고쳐지지 않습니다. 즉, 현재 로그온 한 사용자의 페이지 표시를 업데이트 할 수 없습니다. 이것은 조금 어설픈 것 같습니다. 왜냐하면 그렇게하는 것이 명백한 '기본'일이라고 생각했기 때문입니다.

클라이언트 측 Facebook JS 및 루트 div를 추가하면이 프로세스는 Facebook JS 기반 페이지 재로드와 함께 작동하지만 클라이언트 측 Facebook JS를 사용하는이 재로드는 필자가 수행 할 수있는 종속성입니다 없이 - 그것은 단지 부 풀리게하고, 물건을 복잡하게한다. 이 문제를 해결하는 방법에 대한 다른 아이디어가있는 사람.

JS가 당신의 닫는 body 태그 앞에 위치 클라이언트 측 :

<div id="fb-root"></div> 
<script> 
    window.fbAsyncInit = function() { 
    FB.init({ 
     appId: '<?php echo $facebook->getAppID() ?>', 
     cookie: true, 
     xfbml: true, 
     oauth: true 
    }); 
    FB.Event.subscribe('auth.login', function(response) { 
     window.location.reload(); 
    }); 
    FB.Event.subscribe('auth.logout', function(response) { 
     window.location.reload(); 
    }); 
    }; 
    (function() { 
    var e = document.createElement('script'); e.async = true; 
    e.src = document.location.protocol + 
     '//connect.facebook.net/en_US/all.js'; 
    document.getElementById('fb-root').appendChild(e); 
    }()); 
</script>