4

페이스 북에서 작동하는 웹 사이트의 사용자 로그인/로그 아웃 메커니즘을 설계하는 데 어려움이 있습니다. .JS SDK의 본질에 혼란 페이스 북 이벤트

사용자가

FB.getLoginStatus()에 로그인 할 때마다 페이지로드에 불을 'auth.login'

모든 페이지로드에 발생합니다 :

특정 페이스 북 이벤트의 동작은 반 직관적 보인다 예상대로

사용자가 실제로 로그 아웃 할 때만 'auth.logout'이 실행되고 'auth.login'과 달리 사용자가 로그인하지 않은 경우 모든 페이지로드시 auth.logout이 실행되지 않습니다.

시스템을 구축하고 싶습니다. 사용자 세션이 페이스 북에 로그인되어 있다고 생각하는지 여부. 사용자의 세션이 페이스 북에 로그인되어 있다고 생각하도록 설정되어 있지만 실제로는 서버에 대한 아약스 호출을 수행하지 않고 세션을 업데이트하십시오. 세션 및 페이스 북 js sdk가 사용자가 로그인했는지 여부에 대해 일치하는 경우 아무 작업도 수행하지 않습니다. 그리고 사용자 세션이 페이스 북에 로그인되어 있지만 js sdk에 로그인되었다는 것을 모르는 경우 서버를 ajax 호출로 업데이트하십시오.

사용자의 현재 페이스 북 로그인 상태와 동기화되는 응용 프로그램을 만들고 싶습니다. 그리고 페이스 북의 상태가 바뀔 때마다 로그인/로그 아웃하는 애플리케이션 (내 서버에 대한 아약스 호출을 실행하여 세션을 업데이트)을 원합니다. 사용자가 페이스 북에 로그인하거나 로그 아웃 할 때 안정적으로 감지 할 수 없기 때문에 이것은 어렵습니다.

내가 가진 한 가지 특별한 문제는 사용자가 페이지를로드하고 facebook에 로그인 할 때 auth.login 이벤트와 FB.getLoginStatus() 이벤트가 모두 발생하는 것입니다.

내 궁극적 인 질문은, 페이스 북 이벤트 또는 일반적인 전략의 조합이 그런 응용 프로그램을 만드는 데 사용해야한다는 것입니다. 내가 원하는 것은 hulu.com이 자신의 웹 사이트에 페이스 북 로그인을 구현 한 것입니다. 이것을 읽어 주셔서 감사합니다!

<script> 
    window.fbAsyncInit = function() { 
    FB.init({appId: '<?=$facebook_app_id?>', 
      status: true, 
      cookie: false, 
      xfbml: true}); 

    FB.getLoginStatus(function(response) { 

     console.log('getLoginStatus'); 
     console.log(response); 

     if(response.session){ 
      if(window.module.Globals.prototype.oauth_uid != response.session.uid){ 
       //authenticated user unknown to server, update server and set session 
       window.module.VCAuth.prototype.session_login(); 
      } 
     }else{ 
      if(window.module.Globals.prototype.oauth_uid){ 
       //unauthenticated user with authenticated session, update server and unset session 
       window.module.VCAuth.prototype.session_logout(); 
      } 
     } 

    }); 

    FB.Event.subscribe('auth.login', function(response){ 
     console.log('auth.login'); 
     console.log(response); 

    }); 

    FB.Event.subscribe('auth.logout', function(response){ 
     console.log('auth.logout'); 
     console.log('response'); 
    }); 

    }; 
    (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> 
+0

은 do.abe로 설정 한 것을 수행 할 수 있습니다. 나는 비슷한 것을 시도하고 있으며, 사용자를 올바르게 로그 아웃하지 못하고 로그 아웃 상태를 유지할 수 없습니다. 자동으로 그는 로그인하고 있습니다. –

답변

5

모든 방법에 대해 동일한 콜백을 사용하는 것이 좋습니다. 이렇게하면 걱정할 인증 코드 경로가 하나 생깁니다. 당신은 하나의 큰 문제는했다

function authCallback(response) { 
    if(response && response.session){ 
     if(window.module.Globals.prototype.oauth_uid != response.session.uid){ 
      //authenticated user with invalid session 
      window.module.VCAuth.prototype.session_login(); 
     } 
    }else{ 
     if(window.module.Globals.prototype.oauth_uid){ 
      //unauthenticated user with authenticated session 
      window.module.VCAuth.prototype.session_logout(); 
     } 
    } 
} 

FB.getLoginStatus(authCallback); 
FB.Event.subscribe('auth.login', authCallback); 
FB.Event.subscribe('auth.logout', authCallback); 

(즉, 멀리 당신이 제공 한 코드에서하지 않은) :

auth.login 이벤트와 FB.getLoginStatus (모두) 사건이처럼 불.

그냥 콜백이 VCAuth의 올바른 상태가 설정되어 호출되는 다음 있도록 서버에 비동기 호출을하기 전에 그 session_logout()와 session_login() 설정/설정 해제 oauth_uid을합니다.

참고 : auth.logout가 로그인 된 사용자를 의미하기 때문에 auth.logout 모든 페이지로드를 해고되지는 사용자가 오른쪽 로그온하지 않은 경우 auth.logout 화재로 이해가되지 않습니다.?

희망이 도움이됩니다.