Facebook Oauth Logout

Eu tenho um aplicativo que se integra ao Facebook usando o Oauth 2.

Eu posso autorizar com o FB e consultar suas APIs REST e Graph perfeitamente, mas quando eu autorizo ​​uma session ativa do navegador é criada com o FB. Eu posso então sair do meu aplicativo muito bem, mas a session com FB persiste, por isso, se alguém usa o navegador, eles vão ver os usuários anteriores da conta FB (a menos que o usuário anterior manualmente faça o logout do FB também).

Os passos que eu dou para autorizar são:

  1. Ligue para [LINK: graph.facebook.com/oauth/authorize?client_id …]

Esta etapa abre uma janela de login / conexão do Facebook se o navegador do usuário ainda não tiver uma session do FB ativa. Uma vez logados no facebook, eles redirecionam para o meu site com um código que eu posso trocar por um token oauth.

  1. Ligue para [LINK: graph.facebook.com/oauth/access_token?client_id ..] com o código de (1)

Agora tenho um Oauth Token e o navegador do usuário está logado em meu site e no FB.

  1. Eu chamo um monte de APIs para fazer coisas: ou seja, [LINK: graph.facebook.com/me?access_token= ..]

Vamos dizer que meu usuário quer sair do meu site. Os termos e condições do FB exigem que eu faça o Single Sign Off, portanto, quando o usuário faz logoff do meu site, eles também são desconectados do Facebook. Há argumentos de que isso é um pouco estúpido, mas estou feliz em cumprir se houver alguma maneira de realmente conseguir isso.

Eu vi sugestões que:

A. Eu uso a API Javascript para sair: FB.Connect.logout (). Bem, eu tentei usar isso, mas não funcionou, e eu não tenho certeza exatamente como poderia, já que eu não uso a API Javascript de nenhuma maneira no meu site. A session não é mantida ou criada pela API Javascript, então não sei como ela deve expirar também.

B. Use [LINK: facebook.com/logout.php]. Isso foi sugerido por um administrador nos fóruns do Facebook há algum tempo. O exemplo dado está relacionado à maneira antiga de obter sessões de FB (non-oauth), então não acho que possa aplicá-lo no meu caso.

C. Use o antigo REST api expireSession ou revokeAuthorization. Eu tentei ambos e enquanto eles expiram o token Oauth, eles não invalidam a session que o navegador está usando atualmente, então não tem efeito, o usuário não está desconectado do Facebook.

Eu estou realmente um pouco solto, a documentação do Facebook é irregular, ambígua e muito pobre. O suporte nos fóruns é inexistente, no momento eu não posso nem mesmo entrar no fórum do facebook, e além disso, a sua própria integração FB Connect nem funciona no próprio fórum. Não inspira muita confiança.

Ta por qualquer ajuda que você possa oferecer. Derek

ps. Tive que mudar HTTPS para LINK, não o suficiente karma para postar links que provavelmente é justo o suficiente.

Eu estou tendo o mesmo problema. Eu também faço o login usando oauth (estou usando RubyOnRails), mas para o logout, eu faço isso com JavaScript usando um link como este:

Logout 

Isso primeiro chama a function onclick e realiza um logout no facebook, e então a function normal https://stackoverflow.com/logout do meu site é chamada.

Embora eu prefira uma solução de servidor também, mas pelo menos ela faz o que eu quero, ela me desconecta em ambos os sites.

Eu também sou muito novo no material de integração do Facebook e joguei pela primeira vez com ele, mas meu sentimento geral é que a documentação está bem espalhada por todo o lugar com muitas coisas desatualizadas.

Isso funciona a partir de agora – e está documentado no site do Facebook @ http://developers.facebook.com/docs/authentication/ . Não sei ao certo quando foi adicionado à documentação, tenho certeza de que não estava lá quando verifiquei o fev-2012

Você pode registrar logicamente o usuário do Facebook, redirecionando o usuário para

https://www.facebook.comhttps://stackoverflow.com/logout.php?next=YOUR_REDIRECT_URL&access_token=USER_ACCESS_TOKEN

Esta solução não funciona mais com a API atual do FaceBook (parece que não foi intencional para começar)

 http://m.facebook.comhttps://stackoverflow.com/logout.php?confirm=1&next=http://yoursitename.com; 

Tente dar este link em seu link de saída ou botão onde “yoursitename.com” é onde você deseja redirect de volta após o logout pode ser a página inicial de ur.

Funciona..

Posso programaticamente logar o usuário pelo Facebook redirecionando o usuário para

https://www.facebook.comhttps://stackoverflow.com/logout.php?next=YOUR_REDIRECT_URL&access_token=USER_ACCESS_TOKEN

O URL fornecido no próximo parâmetro deve ser um URL com o mesmo domínio de base do seu aplicativo, conforme definido nas configurações do seu aplicativo.

Mais detalhes: https://developers.facebook.com/docs/authentication

Você pode fazer isso com o access_token :

 $access_array = split("\|", $access_token); $session_key = $access_array[1]; 

Você pode usar essa $session key no PHP SDK para gerar uma URL de logout funcional.

 $logoutUrl = $facebook->getLogoutUrl(array('next' => $logoutUrl, 'session_key' => $session_key)); 

Isso termina a session do navegador no Facebook.

Com PHP estou fazendo:

 logout. if(isset($_GET['action']) && $_GET['action'] === 'logout'){ $facebook->destroySession(); header(WHERE YOU WANT TO REDIRECT TO); exit(); } 

Funciona e é legal e fácil, estou apenas tentando encontrar um gráfico de logout agora!

Aqui está uma alternativa para a resposta aceita que funciona na versão atual (2.12) da API.

 Logout  

a solução móvel sugerida pela Sumit funciona perfeitamente para o AS3 Air:

html.location = "http://m.facebook.comhttps://stackoverflow.com/logout.php?confirm=1&next=http://yoursitename.com"

Para desenvolvedores Python que desejam fazer logout do usuário diretamente do backend

No momento em que estou escrevendo isso, o truque com m.facebook.com não funciona mais (pelo menos para mim) e o usuário é redirecionado para a página de login do FB móvel, o que obviamente não é bom para o UX.

Felizmente, o FB PHP SDK tem uma solução semi-documentada (no caso de o link não levar à function getLogoutUrl() , basta procurá-lo nessa página). Isso também é mencionado em pelo menos um outro problema no StackOverflow: Facebook php SDK getLogoutUrl () .

BTW Acabei de notar que Zach Greenberg acertou nesta questão, mas estou adicionando minha resposta como um resumo para desenvolvedores de Python.

Uma observação para a resposta de Christoph: Facebook Oauth Logout A function de logout requer uma function de retorno de chamada a ser especificada e falhará sem ela, pelo menos no Firefox. O Chrome funciona sem o retorno de chamada.

 FB.logout(function(response) {}); 

@Christoph: apenas adicionando algo. Eu não penso assim que esta é uma maneira correta.a sair em ambos os lugares ao mesmo tempo. ( Logout ).

 Just add id to the anchor tag . Logout $(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: Esta solução funciona e apenas uma chamada para ‘FB.logout ()’ não funciona porque o navegador quer que uma interação do usuário chame essa function, para que ela saiba – é um usuário e não um script.

 Logout 

é simples, basta digitar: $ facebook-> setSession (null); para logout