Vin*_* EG 79 javascript api oauth-2.0
在我的应用程序中,我使用jsapi实现了Google注销.
我使用网址https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=xxxxxx连接到Google,然后通过https://www.googleapis.com/plus/v1/people/xxxxxx获取用户数据来自谷歌个人资料.
现在,我需要在点击应用程序中的按钮时从Google注销用户.如何在JavaScript中实现此功能,或者至少每次用户登录时都必须询问Google登录页面.
我试过了approval_prompt=force
,但似乎没有工作.
jmo*_*253 219
我不确定您是否使用OAuth登录Stack Overflow,例如"使用Google登录"选项,但是当您使用此功能时,Stack Overflow只是询问Google是否知道您是谁:
"哟谷歌,这个Vinesh家伙声称vinesh.e@gmail.com是他,是真的吗?"
如果您已经登录,Google会说YES.如果没有,Google会说:
"等一下Stack Overflow,我会对这个家伙进行身份验证,如果他能为他的Google帐户输入正确的密码,那么就是他".
当您输入Google密码时,Google会告诉Stack Overflow您是谁,并且Stack Overflow会将您登录.
以下是OAuth新手的开发人员有时会感到困惑...谷歌和Stack Overflow,Assembla,Vinesh的非常酷的网络应用程序,都是不同的实体,谷歌对Vinesh酷炫的webapp上的帐户一无所知.反之,除了您通过API公开的内容,您还可以使用它来访问个人资料信息.
当您的用户退出时,他/她不会退出Google,他/她正在退出您的应用,Stack Overflow或Assembla,或使用Google OAuth对用户进行身份验证的任何Web应用程序.
事实上,我可以退出所有Google帐户,但仍然会登录Stack Overflow.一旦您的应用知道该用户是谁,该人就可以退出Google.不再需要Google.
说到这一点,你要做的就是将用户从真正不属于你的服务中注销.想想这样:作为一个用户,如果我使用我的Google帐户登录5种不同的服务,您认为我会是多么恼火,那么当我第一次退出其中一项服务时,我必须登录我的Gmail帐户再次,因为该应用程序开发人员决定,当我退出他的应用程序时,我也应该退出Google?那会很快变老.总之,你真的不想这样做 ......
话虽如此,如果您仍然希望将用户从Google注销,并意识到您可能正在破坏其工作流程,则可以从其中一个Google服务注销按钮动态构建注销网址,然后使用一个img元素或一个脚本标记:
<script type="text/javascript"
src="https://mail.google.com/mail/u/0/?logout&hl=en" />
Run Code Online (Sandbox Code Playgroud)
要么
<img src="https://mail.google.com/mail/u/0/?logout&hl=en" />
Run Code Online (Sandbox Code Playgroud)
要么
window.location = "https://mail.google.com/mail/u/0/?logout&hl=en";
Run Code Online (Sandbox Code Playgroud)
如果您将用户重定向到注销页面,或者从非跨域限制的元素调用它,则该用户将从Google注销.
请注意,这并不一定意味着用户将退出您的应用程序,只有Google.:)
请记住,重要的是,当您注销应用程序时,您无需让用户重新输入密码.这就是重点!它对Google进行身份验证,因此用户无需在他或她使用的每个Web应用程序中反复输入密码.需要一些时间来习惯,但要知道,只要用户登录Google,您的应用就不必担心用户是否是他/她所说的人.
我使用与OAuth一起使用的Google个人资料信息,在项目中实现了相同的功能.我尝试了同样的尝试,当他们不得不一次又一次地登录谷歌时,它真的开始让人生气,所以我们停止将它们从谷歌中删除.:)
小智 21
您可以退出并重定向到您的网站:
var logout = function() {
document.location.href = "https://www.google.com/accounts/Logout?continue=https://appengine.google.com/_ah/logout?continue=http://www.example.com";
}
Run Code Online (Sandbox Code Playgroud)
对我来说,它的工作原理(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
}
Run Code Online (Sandbox Code Playgroud)
你必须在android中的AsyncTask中调用这个函数