2012-08-23 2 views
0

나는 페이스 북 API와 연동하여 PHP 클래스가 있습니다페이스 북 로그인/로그 아웃/체크 사용자

class Social { 
    private $name; 
    private $context; 
    private $tocken; 

    public function check(){ 
    $this->tocken = $this->context->getAccessToken(); // get current tocken 
    if (isset($_SESSION['fb_tocken']) AND !empty($_SESSION['fb_tocken'])){ 
     // session tocken not null 
     if ($_SESSION['fb_tocken'] == $this->tocken){ 
      // session tocken = current tocken 
      // update last active 
      return true; 
     } elseif ($this->tocken == APPLICATION_TOCKEN) { 
      // current tocken == default tocken 
      $this->logout(); 
     } else { 
      // current tocken <> default tocken 
      $this->logout(); 
     } 
    } else { 
     // session tocken is null 
     if ($this->tocken == APPLICATION_TOCKEN){ 
      // current tocken is default 
      return false; 
     } else { 
      // current tocken is not default 
      if ($this->getUserInfo()){ 
      // user registered - login action 
      if ($this->login()) 
       return true; 
      else 
       return false; 
      } else { 
      // register new user 
      if ($this->register()){ 
       if ($this->login()){ 
        return true; 
       } else 
        return false; 
      } else 
       return false; 
      } 
     } 
    } 
    } 
    // ... 
}; 

사용자가 사용 alogritm 경우

1 - 페이스 북에 로그인 2 - 한국어 (4)로부터 아웃 - - 프로그램 3 로그인 한국어 5 로그인 - 오픈 애플리케이션

출원 문제점 : 0

다섯 번째 단계 후에 내 앱에서 사용자를 승인 할 수 없습니다. 그러나 사용자가 '새로 고침'을 누르면 권한이 부여됩니다.

+0

@Roddie이 클래스를 수정하면 작동합니다. 하지만 문제가 있습니다 - IE x - Iframe에서 쿠키를 저장하지 않았습니다.이 동작을 극복하는 방법은 무엇입니까? –

답변

0

올바른 동작이므로 코드 나머지 부분 (토큰을 잡는 비트) 없이는 확인할 수 없습니다.

사용자가 로그 아웃하면 현재 토큰 (세션에 저장 한)이 유효하지 않게됩니다. 사용자가 Facebook에 다시 로그인하면 새 토큰을 가져와야하지만 자동으로 실행되지는 않습니다. 그러나 새로 고침을하면 getAccessToken() 코드 (위)에 새 토큰을 가져옵니다.

가장 간단한 해결 방법은 Javascript에 리스너를 추가하여 로그인 및 로그 아웃하는 것입니다. details here을 찾을 수 있으며 auth.login 처리기가 필요합니다. 방아쇠를 당겼을 때 페이지를 새로 고침하십시오.

Javascript를 사용하는 다른 옵션으로는 백그라운드에서 세션을 업데이트 할 수있는 PHP 수신기에 새 토큰을 보낼 수 있습니다.

+0

Robbie $ this-> tocken = $ this-> context-> getAccessToken(); // current tocken –

+0

이벤트 (auth.login) // Internet Explorer XX에서 작동하지 않습니다. –

+0

나머지 코드를 디버깅해야합니다. IE에서 정상적으로 작동하므로 다른 점이 있습니다. 아마 Javascript 스크립트가 실행되는 것을 멈추거나 새로 고침 명령이 잘못되었습니다. 그러나 우리는 코드를 보지 않고 그 이상을 말할 수는 없습니다. – Robbie