如何允许用户在 Node JS Passport JS 失败后尝试不同的电子邮件?
Posted
技术标签:
【中文标题】如何允许用户在 Node JS Passport JS 失败后尝试不同的电子邮件?【英文标题】:How to allow user to try a different email after failure in NodeJS PassportJS? 【发布时间】:2015-10-12 17:17:05 【问题描述】:目前我正在使用以下代码检查用户是否拥有某个域名电子邮件地址。最初,当谷歌身份验证窗口显示时,如果用户已经登录 Chrome,则无法更改其电子邮件地址。当我使用 Google 身份验证登录类似网站时,我似乎记得被允许添加电子邮件地址或类似的东西。
因此,假设用户尝试使用非 lsmsa.edu 电子邮件地址登录,但失败了。目前它显示一个令人讨厌的错误。我将如何使用户可以尝试使用不同的电子邮件地址重新登录。
if ( profile.emails[0].value.indexOf("lsmsa.edu") > -1 )
var newUser = new User()
newUser.google.id = profile.id
newUser.google.token = token
newUser.google.name = profile.displayName
newUser.google.email = profile.emails[0].value
newUser.save(function(err)
if (err) throw err
return done(null, newUser)
)
else
done(new Error("Invalid Domain. Must use LSMSA email address."))
【问题讨论】:
【参考方案1】:查看hd
parameter。它确保用户只能使用正确的电子邮件登录。
编辑:这不是每个请求的选项。如果您想将它与passport-google-oauth
一起使用,请将您的配置编辑为:
passport.use(new GoogleStrategy(
returnURL: 'http://www.example.com/auth/google/return',
realm: 'http://www.example.com/',
// Add this
hd: 'example.com'
,
function(identifier, profile, done)
// Blah Blah Blah, Blow up Pluto, Milk Cows, Eat Chocolate, Etc.
));
编辑:如果出于某种原因您有让他们再次登录,而不是使用hd
,只需销毁会话( req.session.destroy();
),然后将它们重定向到您的身份验证网址(即/auth/google
)。但是,使用hd
将获得更好的用户体验。
【讨论】:
@Connorelsea 使用该选项,他们无法使用错误的电子邮件登录。如果您需要他们重新登录,只需照常重定向即可。 @Connorelsea:不,这不是响应参数。如果您的域是“example.com”,则在您的护照选项中输入hd: "example.com",
。
@Connorelsea:请不要对我无礼。如果您查看我编辑的答案,您会在设置时将其作为一个选项传递给护照。然后它会将其与授权请求一起发送给 Google,Google 不会让您使用无效的电子邮件登录。
很抱歉,如果它显得粗鲁无礼。我试图尽可能地感激,但我可以看到它是多么的讽刺哈哈。我会在reddit上给你发消息。我现在很难过,因为你认为我试图变得粗鲁。对不起,伙计。
没问题。我一直这样做。以上是关于如何允许用户在 Node JS Passport JS 失败后尝试不同的电子邮件?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 mongo、passport 和 node js 更新用户的个人资料?
Passport-local mongoose node.js 支持多种用户类型
Node.js - JWT、API:如何实现多个 Passport.js 身份验证中间件?