如何允许用户在 Node JS Passport JS 失败后尝试使用不同的电子邮件?

How to allow user to try a different email after failure in NodeJS PassportJS?

目前我正在使用以下代码检查用户是否拥有某个域名电子邮件地址。最初,当显示 google 身份验证 window 时,如果用户已经登录到 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."))
}

查看 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();),然后将它们重定向到您的身份验证 url(即 /auth/google)。但是,使用 hd 将获得更好的用户体验。