如何使 passportjs 本地用户名不区分大小写?

How to make passportjs local username be case insensitive?

现在我在我的网站上使用 passportjs(本地)进行身份验证,但用户名字段区分大小写,有没有办法改变它?我考虑过在注册时将用户名全部设为小写,但这似乎不是一个非常有效的选择,而且仍然不允许我让登录不区分大小写。

router.post("/login", middleware.isNotLoggedIn, passport.authenticate("local", {
successRedirect: "",
failureRedirect: "/login"
}), function(req, res){
    res.redirect("back");
});

我自己也遇到了同样的问题。似乎护照应该对此有正式的答复。制作中间件的最简单方法。这个中间件需要在两个地方。首先在注册函数中让用户名以小写形式保存。然后在Login函数中如下图为例。祝你好运!

  function usernameToLowerCase(req, res, next){
            req.body.username = req.body.username.toLowerCase();
            next();
        }
  router.post("/login", usernameToLowerCase, passport.authenticate("local", {
        successRedirect: "/",
        failureRedirect: "/login"
    }), function (req, res) {
    });

@robertklep 通过建议新的 LocalStrategy(...) 提出了正确的想法。注意 new RegExp(username, "i") 使比较不区分大小写。

passport.use(new LocalStrategy(
  function(username, password, done) {
   //User.getUserByUsername(username, function(err, user){
     User.getUserByUsername(new RegExp("^" + username + "$", "i"), function(err, user){
    if(err) throw err;
    if(!user){
        return done(null, false, {message: 'Unknown User'});
    }
    ...