为了账号安全,请及时绑定邮箱和手机立即绑定

如何注销我使用OAuth2登录Google的应用程序?

/ 猿问

如何注销我使用OAuth2登录Google的应用程序?

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


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


现在,我需要在我的应用程序中单击一个按钮的同时从Google登出该用户。我该如何在JavaScript中实现此功能,或者至少每次用户登录时它都必须询问Google登录页面。


我已经尝试过approval_prompt=force,但是似乎没有用。


查看完整描述

3 回答

?
四季花海

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

我不确定您是否使用OAuth来登录Stack Overflow,例如“使用Google登录”选项,但是当您使用此功能时,Stack Overflow只是询问Google是否知道您是谁:


“ Google,这个Vinesh伙计声称他是vinesh.e@gmail.com,是真的吗?”


如果您已经登录,Google会说是。如果没有,Google会说:


“等待一秒钟的堆栈溢出,我将验证这个家伙,如果他可以为自己的Google帐户输入正确的密码,那就是他。”


输入Google密码后,Google会告诉Stack Overflow您就是您所说的身份,然后Stack Overflow登录。


当你注销您的应用程序,你登出您的应用程序:

这是刚接触OAuth的开发人员有时会感到困惑的地方... Google和Stack Overflow,Assembla,Vinesh的“非常酷-光滑-webapp”都是不同的实体,而Google对Vinesh凉爽的webapp上的帐户一无所知,反之反之亦然,除了用于访问个人资料信息的API公开的内容外。


当您的用户注销时,他或她没有从Google注销,他/她正在注销您的应用程序,Stack Overflow,Assembla或任何使用Google OAuth验证用户身份的Web应用程序。


实际上,我可以注销所有Google帐户,但仍可以登录Stack Overflow。一旦您的应用知道用户是谁,该人便可以退出Google。不再需要Google。


话虽如此,您要执行的操作是将用户从真正不属于您的服务中注销。像这样思考:作为用户,如果我用自己的Google帐户登录5种不同的服务,您会感到多么烦恼,那么当我第一次注销其中之一时,我必须登录到我的Gmail帐户再次因为那个应用程序开发人员决定,当我注销他的应用程序时,我也应该注销Google吗?这真的会很快变老。简而言之,您真的不想这样做 ...


是的,无论如何,我仍然想从Google登出该用户,只是告诉我该怎么做?

话虽如此,如果您仍然想从Google登出用户,并且意识到自己很可能在破坏他们的工作流程,则可以从他们的Google服务登出按钮之一动态构建登出网址,然后使用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";

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


请注意,这不一定意味着用户将仅从Google 登出您的应用程序。:)


摘要:

对您而言,重要的是要记住,当您注销应用程序时,无需使用户重新输入密码。这就是重点!它通过Google进行身份验证,因此用户不必在使用的每个Web应用程序中一遍又一遍地输入密码。这需要一些时间来习惯,但要知道,只要用户登录到Google,您的应用就不必担心用户是否是他/她所说的那个人。


使用OAuth的Google个人资料信息,我在项目中的实现方式与您相同。我尝试了您要尝试的相同操作,当人们不得不一次又一次地登录Google时,它确实开始使人们感到愤怒,因此我们停止了将他们从Google登出。:)



查看完整回答
反对 回复 2019-10-06
?
慕后森

您可以注销并重新引导到您的站点:


var logout = function() {

    document.location.href = "https://www.google.com/accounts/Logout?continue=https://appengine.google.com/_ah/logout?continue=http://www.example.com";

}


查看完整回答
反对 回复 2019-10-06
?
繁花不似锦

对我来说,它有效(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中调用此函数


查看完整回答
反对 回复 2019-10-06

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信