Pergunta

Estou usando o OpenID para registrar o usuário. (Somente conta do Google). Agora eu tenho um link de entrada na minha página, que, ao clicar, quero que o usuário seja conectado a partir das contas do Google e da página para ser redirecionada para a minha página inicial. isso pode ser feito ??

Editar-
Alterar a resposta aceita porque agora o Google permite redirecionar [continuando] para qualquer domínio que desejar.

Foi útil?

Solução

Eu resolvi esse problema chamando essa função quando o usuário clica no link de logout:

var logout = function(){
document.location.href = "https://www.google.com/accounts/Logout?continue=https://appengine.google.com/_ah/logout?continue=http://www.example.com";
}

Quando o usuário clica no link, o navegador redireciona o usuário para a página de logout e somente quando o logout estiver concluído, o usuário é redirecionado para o site "http://www.example.com".

Espero que isso possa ajudar.

Outras dicas

Desafios

Solicitando https://www.google.com/accounts/logout irá registrar o usuário fora. Existe um parâmetro continuação que o Google adiciona às vezes, mas só conseguirá redirecionar o usuário quando o destino for um site do Google, e não o seu. Isso torna a abordagem inutilizável.

Além disso, a especificação OpenID não inclui o registro global neste momento.

Há outra maneira:

Sugestão

Inclua um iframe na sua página e use o manipulador de eventos JavaScript OnClick no link de logout para carregar https://www.google.com/accounts/logout no iframe. Depois disso (você pode verificar se o iframe carregou com êxito), redirecione o usuário para um procedimento de logout para o seu próprio site. Depois de fazer login, deixe a página redirecionar para sua página inicial.

O link pode parecer um pouco assim:

<a href="https://www.google.com/accounts/Logout"
    onclick="myIFrame.location='https://www.google.com/accounts/Logout';StartPollingForCompletion();return false;">
   log out</a>
<iframe id="myIFrame"></iframe>

Você precisa implementar o StartPollingForCompletion() Função para verificar periodicamente se a página de logout foi carregada. usar setTimeout() Para cronometrar a enquete, verifique se há algumas propriedades no iframe (não sei ao certo quais funcionarão, porque você está trabalhando no local cruzado aqui).

Veja também estas perguntas:

OpenID. Como você faz logout

Como adicionar o recurso de logout a um site habilitado para o OpenID?

Eu tenho tentado fazer o mesmo. Apenas para aplicativos do Google -
Para fazer logout, tente as duas opções a seguir:
1) Usando o I -Frame -

<iframe src="https://mail.google.com/a/YOURDOMAIN.IN/?logout&hl=en" width="100%" height="300">
  <p>Your browser does not support iframes.</p>
</iframe>

2) Usando JavaScript -

<script type="text/javascript">
     window.open('https://mail.google.com/a/YOURDOMAIN.IN/?logout&hl=en','logout_from_google','width=600,height=300,menubar=no,status=no,location=no,toolbar=no,scrollbars=no,top=20,left=20');
</script>

Como passei um enorme quantidade de tempo neste problema de login/logout do Google para o meu aplicativo (que é um servidor Node/MongoDB, usando massivamente o Google Docs e o Google Script APIs), tive que compartilhar meus resultados aqui ..

A única boa maneira de fazer logout completamente o usuário é usar isso:

 var newWindow = window.open('https://mail.google.com/mail/?logout&hl=fr','Disconnect from Google','width=100,height=50,menubar=no,status=no,location=no,toolbar=no,scrollbars=no,top=200,left=200');
setTimeout(function(){
    if (newWindow) newWindow.close();
    window.location="auth/google";
},3000);

Se você usar a solução dada acima pelo IRA, está fazendo um logout parcial, parece para a guia atual do navegador. O que significa que, se o usuário fechar a guia e reabrir o aplicativo, ele ainda será registrado na conta anterior.

Eu tive que usar uma janela externa porque não consegui redirecionar corretamente para o meu aplicativo após o logout da conta de email do Google. Essa solução funciona na maioria das vezes, se a largura de banda do usuário não for muito lenta, deixando 3 segundos para o logout que está sendo feito antes de fechar o pop -up. Em seguida, o usuário deve fazer login com outra conta no meu aplicativo de janela principal.

Isso confirma a solução de floccinaucinihilipilificação e talvez a solução do iframe dada acima deve ser melhor que a minha.

Eu só tive que fazer o mesmo, logout o usuário. De alguma forma, a resposta aceita não funciona para mim, recebi um erro do Google

The page you requested is invalid.

Então acabei colocando isso na minha página:

<img src="https://www.google.com/accounts/Logout" />

que registra com sucesso o usuário. fonte

Aqui está o que eu faço, não me lembro se eu inventei ou o encontrei em algum lugar ... funciona como um charme ... além do fato de ele abandonar você em todos os sites do Google (eu não posso acreditar que eles Não forneça uma maneira adequada de fazer isso, mas aí está.)

<script>
function makeFrame(domId,url) { 
    ifrm = document.createElement("IFRAME"); 
    ifrm.setAttribute("src", url);
    ifrm.setAttribute("id", domId);
    ifrm.setAttribute("style", "display:none;");         
    ifrm.style.width = 1+"px"; 
    ifrm.style.height = 1+"px"; 
    document.body.appendChild(ifrm); 
} 

function logOutGoogle(){
    makeFrame('googleLogoutIFrame','https://www.google.com/accounts/Logout');
}
$(window).ready(function() {
    logOutGoogle();
});
</script>

Não sei se a coisa que fiz estava certo. Mas eu consegui usar código como este:

<a class="btn btn-default navbar-btn text-white" id="signOut" href="../home.html" onclick="signOut('https://www.google.com/accounts/Logout');">Sign out</a>
    <script>
      function signOut() {
        var auth2 = gapi.auth2.getAuthInstance();
        auth2.signOut().then(function () {
          console.log('User signed out.');
        });
      }
      firebase.auth().signOut().then(function() {
        // Sign-out successful.
        alert('You have Signed Out. Please Sign In');
      }).catch(function(error) {
        // An error happened.
        alert('An error happened');
      });
    </script>

Eu uso este código para fazer login na conta do Google. Ele lançará um erro, mas não se preocupe, será redirecionado imediatamente após o erro ocorrer diretamente para a rota de inscrição no lado do servidor de aplicativos.

<a href="https://www.google.com/accounts/Logout" target="myiframe">logout</a>
<iframe name="myiframe" style="display:none" onload="redirect()"></iframe>

<script>
  function redirect() {
    window.location = 'http://your.site.com/signout';
  };
</script>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top