我只允许用户使用某个域名登录。此特定功能有效,而不是问题的根源。问题是,当用户尝试使用不正确的电子邮件地址登录时,会陷入某种负面反馈循环。
参考上图,用户(在没有信息的空白隐身页面中)从第一步开始。单击登录会将他们带到第二步,然后再到第3步。尝试使用以错误域名结尾的电子邮件地址登录会使他们进入第4步。这是理想的。
在第四步之后,如果他们退出网站,则会显示第一步。这是可取的。注销的代码如下。
app.get("/logout", function(req, res) {
req.logout()
req.session.destroy()
res.clearCookie("connect.sid")
res.redirect("/")
})
点击登录再次后会发生什么是不受欢迎的。它没有将它们带回到第2步(希望,所以他们可以使用他们的CORRECT电子邮件地址再次登录),而是将它们直接带到第4步。就好像Google记得最后登录的是谁
这是code for my passport.js configuration file。
简短问题:我如何向Google发出不要这样做的信号?或者触发浏览器允许他们再次登录?我很茫然。
额外详细信息:在Oauth2.0 Documentation for Google中,它提到了hd和realm,它可以限制登录到某个域。但我不知道如何在PassportJS配置文件中配置它。
答案 0 :(得分:8)
我认为你想要的是提示用户选择他们的帐户。与我回答的previous question类似的情况。通过这种方式,用户将明确选择他们希望使用的帐户,即使他们之前已经登录过。
将参数prompt=select_account
添加到您的授权请求中。
app.get(
"/auth/google",
passport.authenticate(
"google",
{
scope : ["profile", "email"],
prompt : "select_account" // Added here
}
)
)
这将导致始终显示帐户选择器,即使用户仅登录到一个帐户也是如此。用户可以从他们的帐户中进行选择,也可以添加一个新帐户。
此外,如果您希望基于域限制访问,并且该域是Google Apps for Work域,则最正确的方法是检查ID令牌中的hd
参数。 How to process the ID Token,并提取hd
声明。
答案 1 :(得分:1)