护照本地猫鼬与确切的电子邮件不匹配

Passport local mongoose not matching exact email

我身边用的是mongodbnode js。我正在使用 passport local mongooseregisterlogin 用户。

现在我面临的问题是:注册时。如果用户使用 rajat.test@gmail.com 注册并尝试使用 rajat.Test@gmail.com 登录。然后应用程序将访问权限授予用户,这是错误的。因为在注册时,用户给出的所有字母都是小写的。

所以我只想确认一下,如何在护照本地猫鼬中进行身份验证时启用区分大小写?

下面是我的注册码和登录码

注册

const user = new User(req.body);
try {
    await User.register(user, req.body.password);
    res.status(302).json({message: MESSAGE.USER_REGISTRATION_SUCCESS}); 
} catch(err) {
      handleErrors(res, err);
}

登录

const authRes = await User.authenticate()(req.body.email, req.body.password);
if (authRes && authRes.user) {
    const token = jwt.sign(authRes, config.SECRET);
    if (!authRes.user)
      res.status(400).json(authRes);
    else{
      res.status(302).json({user: authRes.user, token: `JWT ${token}`});                  
    }
} else {
     res.status(401).json({error: MESSAGE.INVALID_LOGIN_ERROR});
}

使用MongoDB

在登录功能中查找用户文档时不区分大小写regular expression match

db.users.find( { email: { $regex: new RegExp(req.body.email, 'i') } } )

使用Javascript

将您的电子邮件字符串转换为小写,然后在登录功能上找到您的用户文档。

db.users.find( { email: req.body.email.toLowerCase() } )

注意:在这种方法中,您需要使用 toLowerCase() 将您的电子邮件在数据库中保存为小写,或者只需将您的架构更改为 email: { type: String, lowercase: true }

只需将您的架构更改为您提供的 email/what 名称:{ 类型:字符串,小写:true }

它绝对适用于您的情况。它对我有用。