护照当地猫鼬与确切的电子邮件地址不符

时间:2019-02-08 07:12:49

标签: node.js mongodb mongoose passport-local

我正在使用 mongodb node js 。我正在使用护照本地猫鼬registerlogin用户。

现在我面临的问题是:在注册时。如果用户使用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});
}

2 个答案:

答案 0 :(得分:1)

使用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 }

答案 1 :(得分:0)

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

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