我正在使用 mongodb 和 node js 。我正在使用护照本地猫鼬来register
和login
用户。
现在我面临的问题是:在注册时。如果用户使用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});
}
答案 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}
这绝对适合您的情况。它对我有用。