javascript sdk – 如何注销我使用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,但似乎没有工作。

最佳答案

OAuth概述:他/她认为他/她是谁?

我不知道你是否使用OAuth登录Stack Overflow,如“使用Google登录”选项,但是当你使用这个功能,Stack Overflow只是问谷歌是否知道你是谁:

“Yo Google, this Vinesh fella claims that vinesh.e@gmail.com is him, is that true?”

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

“Hang on a sec Stack Overflow, I’ll authenticate this fella and if he can enter the right password for his Google account, then it’s him”.

当您输入Google密码时,Google会告诉Stack Overflow您是谁说的,Stack Overflow会记录您。

当您注销应用程式时,即将登出应用程式:

这里是新的OAuth开发人员的地方有时会有点困惑… Google和Stack Overflow,Assembla,Vinesh’s-very-cool-slick-webapp,都是不同的实体,Google对于您在Vinesh的酷webapp上的帐户一无所知,反之亦然,除了您通过API访问配置文件信息所暴露的内容外。

当您的用户退出登录时,他/她未退出Google,他/她正在注销您的应用,或Stack Overflow或Assembla,或任何使用Google OAuth的Web应用程序对用户进行身份验证。

事实上,我可以退出所有的Google帐户,但仍然登录到Stack Overflow。一旦您的应用知道用户的身份,该用户就可以退出Google。不再需要Google。

有了这个说,你要求做的是将用户从一个真正不属于你的服务中注销。想想这样:作为一个用户,你觉得我会是如果我是如果我用我的Google帐户登录5个不同的服务,然后我第一次退出其中一个,我必须登录到我的Gmail帐户再次因为应用开发者决定,当我注销他的应用程序,我也应该退出谷歌?这将变老,真的很快。总之,你真的不想这样做…

是啊,无论如何,我还是想把用户登出Google,只是告诉我我该怎么做?

说到这一点,如果你仍然想要一个用户从谷歌登录,并意识到,你可能会破坏他们的工作流,你可以从他们的Google服务注销按钮动态建立注销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";

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

请注意,这并不一定意味着用户将会退出您的应用程序,而不会退出Google。 ?

概要:

重要的是要记住,当您注销应用程序时,您不需要让用户重新输入密码。这是整个点!它对Google进行身份验证,因此用户不必在其使用的每个Web应用程序中一遍又一遍地输入他或她的密码。它需要一些习惯,但是知道,只要用户登录Google,您的应用程序不需要担心用户是否是他/她说他/她是谁。

我在项目中使用与OAuth相同的Google个人资料信息,与您一样,具有相同的实现。我试过了你想要尝试的同样的事情,它真的开始让人生气,当他们一次又一次登录到Google,所以我们停止了他们从谷歌登录。