Facebook Oauth 로그 아웃
Oauth 2를 사용하여 Facebook과 통합되는 애플리케이션이 있습니다.
FB로 인증하고 REST 및 Graph API를 완벽하게 쿼리 할 수 있지만 인증하면 활성 브라우저 세션이 FB로 생성됩니다. 그런 다음 내 응용 프로그램에서 로그 아웃 할 수 있지만 FB 세션은 계속 유지되므로 다른 사람이 브라우저를 사용하면 이전 사용자 FB 계정이 표시됩니다 (이전 사용자도 FB에서 수동으로 로그 아웃하지 않는 한).
승인하기 위해 취하는 단계는 다음과 같습니다.
- [LINK : graph.facebook.com/oauth/authorize?client_id ...]로 전화하세요.
이 단계는 사용자의 브라우저에 아직 활성 FB 세션이없는 경우 Facebook 로그인 / 연결 창이 열립니다. Facebook에 로그인하면 OAuth 토큰으로 교환 할 수있는 코드를 사용하여 내 사이트로 리디렉션됩니다.
- (1)의 코드로 [LINK : graph.facebook.com/oauth/access_token?client_id ..]를 호출합니다.
이제 Oauth 토큰이 있고 사용자의 브라우저가 내 사이트와 FB에 로그인되었습니다.
- 작업을 수행하기 위해 여러 API를 호출합니다. 예 : [LINK : graph.facebook.com/me?access_token= ..]
내 사용자가 내 사이트에서 로그 아웃하기를 원한다고 가정 해 보겠습니다. FB 이용 약관에 따라 싱글 사인 오프를 수행해야하므로 사용자가 내 사이트에서 로그 아웃하면 Facebook에서도 로그 아웃됩니다. 이것은 약간 어리석은 주장이 있지만 실제로 그것을 달성하는 방법이 있다면 기꺼이 준수합니다.
나는 다음과 같은 제안을 보았다.
A. Javascript API를 사용하여 로그 아웃합니다 : FB.Connect.logout (). 글쎄, 나는 그것을 사용해 보았지만 작동하지 않았고 내 사이트에서 Javascript API를 사용하지 않기 때문에 어떻게 할 수 있는지 정확히 모르겠습니다. 세션은 Javascript API에 의해 유지되거나 생성되지 않으므로 어떻게 만료되어야하는지 잘 모르겠습니다.
B. [링크 : facebook.com/logout.php]를 사용합니다. 이것은 얼마 전에 Facebook 포럼의 관리자가 제안했습니다. FB 세션 (비 oauth)을 얻는 이전 방법과 관련된 예제이므로 제 경우에는 적용 할 수 없다고 생각합니다.
C. 이전 REST API expireSession 또는 revokeAuthorization을 사용합니다. 이 두 가지를 모두 시도했지만 Oauth 토큰이 만료되는 동안 브라우저가 현재 사용중인 세션을 무효화하지 않으므로 효과가 없으며 사용자는 Facebook에서 로그 아웃되지 않습니다.
나는 정말로 약간 느슨한 끝에 있고, Facebook 문서는 고르지 않고 모호하며 매우 가난합니다. 포럼에 대한 지원은 존재하지 않습니다. 현재 저는 페이스 북 포럼에 로그인 할 수도없고, 그 외에는 자체 FB Connect 통합이 포럼 자체에서도 작동하지 않습니다. 많은 자신감을 불러 일으키지 않습니다.
당신이 제공 할 수있는 어떤 도움을 위해 Ta. 데릭
추신. HTTPS를 LINK로 변경해야했는데 아마도 충분히 공정한 링크를 게시하기에 충분한 카르마가 아닙니다.
나는 같은 문제가 있습니다. 또한 oauth (RubyOnRails를 사용하고 있습니다)를 사용하여 로그인하지만 로그 아웃의 경우 다음과 같은 링크를 사용하여 JavaScript로 수행합니다.
<a href="/logout" onclick="FB.logout();">Logout</a>
이것은 먼저 onclick
함수를 호출하고 페이스 북에서 로그 아웃을 수행 한 다음 /logout
내 사이트 의 정상적인 기능을 호출합니다.
나는 서버 측 솔루션을 선호하지만 적어도 내가 원하는 것을 수행하지만 두 사이트에서 모두 로그 아웃됩니다.
나는 또한 Facebook 통합에 익숙하지 않고 처음으로 그것을 가지고 놀았지만 내 일반적인 느낌은 문서가 구식이 많은 곳으로 꽤 퍼져 있다는 것입니다.
이것은 현재 작동하며 페이스 북 사이트 @ http://developers.facebook.com/docs/authentication/ 에 문서화 되어 있습니다 . 얼마나 최근에 문서에 추가되었는지 확실하지 않지만 2012 년 2 월에 확인했을 때 거기에 없었습니다.
사용자를 다음으로 리디렉션하여 프로그래밍 방식으로 Facebook 사용자를 로그인 할 수 있습니다.
https://www.facebook.com/logout.php?next=YOUR_REDIRECT_URL&access_token=USER_ACCESS_TOKEN
이 솔루션은 더 이상 FaceBook의 현재 API에서 작동하지 않습니다 (처음에는 의도하지 않은 것 같습니다)
http://m.facebook.com/logout.php?confirm=1&next=http://yoursitename.com;
이 링크를 로그 아웃 링크 또는 "yoursitename.com"이 로그 아웃 후 다시 리디렉션하려는 위치 인 버튼에 제공하면 홈 페이지가 될 수 있습니다.
효과가있다..
사용자를 다음으로 리디렉션하여 프로그래밍 방식으로 사용자를 Facebook에서 로그 아웃 할 수 있습니다.
https://www.facebook.com/logout.php?next=YOUR_REDIRECT_URL&access_token=USER_ACCESS_TOKEN
다음 매개 변수에 제공되는 URL은 앱 설정에 정의 된 애플리케이션과 동일한 기본 도메인을 가진 URL이어야합니다.
자세한 내용 : https://developers.facebook.com/docs/authentication
다음을 사용하여이 작업을 수행 할 수 있습니다 access_token
.
$access_array = split("\|", $access_token);
$session_key = $access_array[1];
$session key
PHP SDK에서이를 사용하여 기능적인 로그 아웃 URL을 생성 할 수 있습니다 .
$logoutUrl = $facebook->getLogoutUrl(array('next' => $logoutUrl, 'session_key' => $session_key));
이것은 브라우저의 페이스 북 세션을 종료합니다.
PHP를 사용하여 다음을 수행하고 있습니다.
<a href="?action=logout">logout.</a>
if(isset($_GET['action']) && $_GET['action'] === 'logout'){
$facebook->destroySession();
header(WHERE YOU WANT TO REDIRECT TO);
exit();
}
작동하고 멋지고 쉽습니다. 지금 로그 아웃 버튼 그래픽을 찾으려고합니다!
다음은 현재 (2.12) 버전의 API에서 작동하는 허용 된 답변에 대한 대안입니다.
<a href="#" onclick="logoutFromFacebookAndRedirect('/logout')">Logout</a>
<script>
FB.init({
appId: '{your-app-id}',
cookie: true,
xfbml: true,
version: 'v2.12'
});
function logoutFromFacebookAndRedirect(redirectUrl) {
FB.getLoginStatus(function (response) {
if (response.status == 'connected')
FB.logout(function (response) {
window.location.href = redirectUrl;
});
else
window.location.href = redirectUrl;
});
}
</script>
Sumit이 제안한 모바일 솔루션은 AS3 Air에서 완벽하게 작동합니다.
html.location = "http://m.facebook.com/logout.php?confirm=1&next=http://yoursitename.com"
백엔드에서 바로 사용자를 로그 아웃하려는 Python 개발자 용
At the moment I'm writing this, the trick with m.facebook.com no longer works (at least for me) and user is redirected to the mobile FB login page which obviously is not good for UX.
Fortunately, FB PHP SDK has a semi-documented solution (in case the link doesn't lead to getLogoutUrl()
function, just search look for it on that page). This is also mentioned in at least one other on StackOverflow: Facebook php SDK getLogoutUrl() problem.
BTW I've just noticed that Zach Greenberg got it right in this question, but I'm adding my answer as a summary for Python developers.
A note for Christoph's answer: Facebook Oauth Logout The logout function requires a callback function to be specified and will fail without it, at least on Firefox. Chrome works without the callback.
FB.logout(function(response) {});
@Christoph: just adding someting . i dont think so this is a correct way.to logout at both places at the same time.(<a href="/logout" onclick="FB.logout();">Logout</a>
).
Just add id to the anchor tag . <a id='fbLogOut' href="/logout" onclick="FB.logout();">Logout</a>
$(document).ready(function(){
$('#fbLogOut').click(function(e){
e.preventDefault();
FB.logout(function(response) {
// user is now logged out
var url = $(this).attr('href');
window.location= url;
});
});});
Update:
This solution works and just a call to 'FB.logout()' doesn't work because browser wants a user interaction to actually call this function, so that it knows - it is a user not a script.
<a href="#" onclick="FB.logout();">Logout</a>
it's simple just type : $facebook->setSession(null); for logout
참고URL : https://stackoverflow.com/questions/2764436/facebook-oauth-logout
'Program Tip' 카테고리의 다른 글
자바 스크립트 약속을 디버그하는 방법은 무엇입니까? (0) | 2020.11.05 |
---|---|
`printf`에`float`에 대한 지정자가 정의되지 않은 이유는 무엇입니까? (0) | 2020.11.05 |
! = 연산자가 OpenMP에서 허용되지 않는 이유는 무엇입니까? (0) | 2020.11.05 |
PHP 7 인터페이스, 반환 유형 힌트 및 자체 (0) | 2020.11.05 |
.NET에서 GAC에있는 어셈블리의 로컬 복사본을 사용하도록 강제하는 방법 (0) | 2020.11.05 |