web-dev-qa-db-fra.com

déconnexion de compte Google et redirection

J'utilise openid pour connecter l'utilisateur. (Compte Google uniquement) . Maintenant, j'ai un lien de déconnexion dans ma page. redirigé vers ma page d'accueil . Est-ce que ceci peut être fait ??

Modifier-
Modification de la réponse acceptée car Google autorise désormais la redirection [en continu] vers le domaine de votre choix. 

31
Shrinath

J'ai résolu ce problème en appelant cette fonction lorsque l'utilisateur clique sur le lien de déconnexion:

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

Lorsque l'utilisateur clique sur le lien, le navigateur le redirige vers la page de déconnexion. Une fois la déconnexion terminée, l'utilisateur est redirigé vers le site " http://www.example.com ".

J'espère que cela peut aider.

60
ira

Défis

Demander https://www.google.com/accounts/Logout déconnectera l'utilisateur. Il existe parfois un paramètre continueUrl que Google ajoute à cette adresse, mais il ne réussira que pour rediriger l'utilisateur lorsque la cible est un site Google, et non le vôtre. Cela rend l'approche inutilisable. 

De plus, la spécification OpenID n'inclut pas de déconnexion globale pour le moment.

Il y a un autre moyen:

Suggestion

Incluez un IFrame sur votre page et utilisez le gestionnaire d’événements JavaScript onClick sur le lien de déconnexion pour charger https://www.google.com/accounts/Logout dans l’IFrame. Après cela (vous voudrez peut-être vérifier si l'IFrame est chargé avec succès), redirigez l'utilisateur vers une procédure de déconnexion pour votre propre site. Après la déconnexion, laissez cette page rediriger vers votre page d’accueil.

Le lien pourrait ressembler à ceci:

<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>

Vous devez implémenter la fonction StartPollingForCompletion() pour vérifier périodiquement si la page de déconnexion est chargée. utilisez setTimeout() pour chronométrer le sondage et recherchez des propriétés sur l'IFrame (je ne sais pas avec certitude lesquelles fonctionneront, car vous travaillez sur plusieurs sites ici.).

voir aussi ces questions: 

OpenID. Comment vous déconnecter

Comment ajouter une fonctionnalité de déconnexion à un site compatible OpenID?

19
Arjen Kruithof

J'ai essayé de faire la même chose. Pour les applications Google uniquement - 
Pour vous déconnecter, essayez les deux options suivantes: 
1) Utiliser 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) Utiliser 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>

Comme je passais beaucoup de temps sur énorme à résoudre ce problème de connexion/déconnexion Google pour mon application (serveur Node/MongoDB utilisant massivement Google Docs et les API de script Google), je devais partager mes résultats ici .. 

Le seul bon moyen de déconnecter complètement l'utilisateur est d'utiliser ceci:

 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);

Si vous utilisez la solution donnée ci-dessus par ira, il s’agit d’une déconnexion partielle semble-t-il pour l’onglet actuel du navigateur. Ce qui signifie que si l'utilisateur ferme l'onglet, et rouvre l'application, il sera toujours connecté au compte précédent.

Je devais utiliser une fenêtre externe car je ne pouvais pas rediriger correctement mon application après la déconnexion du compte Google de messagerie. Cette solution fonctionne la plupart du temps, si la bande passante de l'utilisateur n'est pas trop lente, ce qui laisse 3 secondes pour que la déconnexion soit effectuée avant de fermer la fenêtre contextuelle. Ensuite, l'utilisateur doit se connecter avec un autre compte dans l'application de la fenêtre principale.

Cela confirme la solution de floccinaucinihilipilification et peut-être que la solution d'iframe donnée ci-dessus devrait être meilleure que la mienne.

1
Cédric NICOLAS

Je devais juste faire la même chose, déconnecter l'utilisateur. en quelque sorte la réponse acceptée ne fonctionne pas pour moi, j'ai une erreur de google

The page you requested is invalid.

alors j'ai fini par mettre ceci dans ma page:

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

qui déconnecte avec succès l'utilisateur. la source

0
balazs

Je ne sais pas si ce que j'ai fait était bien. Mais j'ai réussi à utiliser un code comme celui-ci:

<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>
0
Endi hariadi

Voici ce que je fais. Je ne me souviens pas si je l'ai inventé ou trouvé quelque part ... Cela fonctionne comme un charme ... à part le fait qu'il vous déconnecte de tous les sites Google (je ne peux pas croire qu'ils ne fournissez pas une manière appropriée de le faire, mais voilà.)

<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>
0
Quinxy von Besiex