如何让Google停止在PassportJS中自动logging用户?

我只允许用户使用某个域名login。 这个特定的function起作用,而不是问题的根源。 问题是当用户尝试使用不正确的电子邮件地址login时,用户会陷入一种负面的反馈循环。

图像以可视方式描述登录过程

参照上面的图片,用户(在没有信息的空白隐身页面中)从第一步开始。 单击login使他们到步骤二,然后到步骤3.试图login以不正确的域名结尾的电子邮件地址使他们到步骤4.这是所需的。

第四步之后,如果他们从网站注销,他们被提出第一步。 这是可取的。 注销代码如下。

app.get("/logout", function(req, res) { req.logout() req.session.destroy() res.clearCookie("connect.sid") res.redirect("/") }) 

他们再次点击login后会发生什么是不可取的。 而不是把他们带回到第二步(所需的,所以他们可以用他们的正确的电子邮件地址再次login),它使他们直接到第四步。 就好像谷歌记得最后login的人一样。

这是我的passport.jsconfiguration文件的代码 。

简短的问题:我如何向Google表示不要这样做? 或者触发浏览器,让他们再次login? 我很茫然。

额外的细节:在谷歌的Oauth2.0文档 ,它提到了高清和领域,可以限制login到一个特定的领域。 但是我不知道如何在PassportJSconfiguration文件中configuration它。

我想你想要的是提示用户select他们的帐户。 类似的情况,我回答了以前的问题 。 这样用户将明确地select他们希望使用哪个帐户,即使他们以前已经login。


将参数prompt=select_account添加到您的授权请求中。

 app.get( "/auth/google", passport.authenticate( "google", { scope : ["profile", "email"], prompt : "select_account" // Added here } ) ) 

这将导致帐户select器始终显示,即使用户只login到一个帐户。 用户将能够从他们的帐户中select,或者添加一个新帐户。

例如: https : //accounts.google.com/o/oauth2/auth?redirect_uri=https%3A%2F%2Fdevelopers.google.com%2Foauthplayground&response_type=code&client_id=407408718192.apps.googleusercontent.com&scope=profile+email&access_type=offline&prompt = select_account


另外,如果您希望根据域限制访问权限,并且该域是Google Apps for Work域,则最正确的方法是检查ID令牌中的hd参数。 如何处理ID令牌 ,并提取hd声明。

如果您对使用的电子邮件不满意,您可以撤消该令牌。 您必须提出一个额外的请求,将该帐户的访问令牌撤销到您的OAuth应用程序。

在你的路由callback中执行这个代码(使用request模块的例子):

 request.get('https://accounts.google.com/o/oauth2/revoke', { qs:{token:'[ACCESS or REFRESH TOKEN]'} }, function (err, res, body) { }) 

之后,在随后的login尝试中将再次提示用户。

看看@William Denniss的回答 ,如果你想每次都提示用户login。