如何注销我使用OAuth2使用Googlelogin的应用程序?

在我的应用程序中,我使用jsapi实现了Google注销。

我使用https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=xxxxxxurl连接到Google,然后使用https://www.googleapis.com/plus/v1/people/xxxxxx获取用户数据从谷歌个人资料。

现在我需要从Google注销用户,同时点击我的应用程序中的button。 我怎样才能在JavaScript中实现这一点,或者至less每次用户login时都必须询问Google的login页面。

我已经尝试了approval_prompt = force,但似乎没有工作。

OAuth概述:他/她说他/她的用户是:

我不确定您是否使用OAuthlogin到堆栈溢出,如“使用Googlelogin”选项,但是当您使用此function时,Stack Overflow只是询问Google是否知道您是谁:

“哟谷歌,这个Vinesh的家伙声称vinesh.e@gmail.com就是他,这是真的吗?

如果您已经login,Google会说“是”。 如果没有,Google会说:

“挂上一秒堆栈溢出,我会authentication这个家伙,如果他可以input正确的密码为他的谷歌帐户,那就是他”。

当你input你的Google密码时,Google会告诉Stack Overflow你是你自己说的,Stack Overflow会让你login。

当你注销你的应用程序时,你正在注销你的应用程序:

以下是OAuth开发人员有时会感到困惑的地方… Google和Stack Overflow,Assembla,Vinesh's very cool-slick-webapp,都是不同的实体,Google对于您在Vinesh的酷网站上的帐户一无所知除了通过您用来访问configuration文件信息的API公开外,

当用户注销时,他或她不会从Google注销,他/她正在注销应用程序,堆栈溢出或Assembla,或任何Web应用程序使用Google OAuth对用户进行身份validation。

实际上,我可以注销所有Google帐户,但仍然可以login到堆栈溢出。 一旦您的应用程序知道用户是谁,该人就可以注销Google。 Google不再需要。

这就是说,你所要做的就是把用户从一个不属于你的服务中注销。 想想这样吧:作为一个用户,如果我用我的Google帐户login到5个不同的服务,那么你会觉得有多恼火,那么当我第一次注销其中的一个时,我必须login到我的Gmail帐户再次因为那个应用程序开发者决定,当我退出他的应用程序时,我也应该从Google注销? 这将变得非常快。 总之,你真的不想这样做

无论如何,我还是想把用户注销Google,告诉我怎么做?

这样说,如果您仍然希望将用户从Google注销,并意识到您可能正在中断其工作stream程,则可以从其某个Google服务注销buttondynamic构build注销URL,然后使用一个img元素或脚本标记:

<script type="text/javascript" src="https://mail.google.com/mail/u/0/?logout&hl=en" /> 

要么

 <img src="https://mail.google.com/mail/u/0/?logout&hl=en" /> 

要么

 window.location = "https://mail.google.com/mail/u/0/?logout&hl=en"; 

如果您将用户redirect到注销页面,或者从不受跨域限制的元素调用该用户,则用户将从Google注销。

请注意,这并不意味着用户只能从您的应用程序中注销,而只能使用Google。 🙂

概要:

请记住,重要的是,当您注销应用程序时,不需要让用户重新input密码。 这就是全部的重点! 它对Google进行身份validation,因此用户无需在他或她使用的每个Web应用程序中一遍又一遍地input自己的密码。 这需要一些习惯,但是要知道,只要用户login到Google,您的应用程序就不必担心用户是否是他/她所说的那个人。

我在您的项目中使用Google Profile信息与OAuth一样具有相同的实施。 我尝试了与你想要尝试的内容相同的内容,但是当他们不得不一次又一次地login到Google时,他们真的开始让人生气,所以我们停止将它们从Google注销。 🙂

您可以注销并重新转到您的网站:

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

对我来说,它的工作原理(java-android)

 void RevokeAcess() { try{ HttpClient client = new DefaultHttpClient(); HttpPost post = new HttpPost("https://accounts.google.com/o/oauth2/revoke?token="+ACCESS_TOKEN); org.apache.http.HttpResponse response = client.execute(post); } catch(IOException e) { } CookieManager.getInstance().removeAllCookie(); // this is clear the cookies which tends to same user in android web view } 

你必须在android的AsyncTask中调用这个函数

这适用于我…

 var auth2 = gapi.auth2.getAuthInstance(); auth2.signOut().then(function () { console.log('User signed out.'); }); 

来源: https : //developers.google.com/identity/sign-in/web/sign-in

这工作正常…

 var auth2 = gapi.auth2.getAuthInstance(); auth2.signOut().then(function () { console.log('User signed out.'); }); 

但注销只发生在特定的应用程序。 不是从谷歌帐户。

来源: https : //developers.google.com/identity/sign-in/web/sign-in