我正在尝试使用用户名或电子邮件登录用户,即用户可以输入电子邮件或密码并且应该能够登录。但是,到目前为止我能够使用其中之一。
这是迄今为止尝试过的代码。
authenticate: function (req, res) {
var username = req.body.username;
var email = req.body.email;
users.findOne({
or: [
{username: username},
{email: email}
]
}).exec(function(err, user) {
console.log(user);
if (err) {
return res.json({err});
} else if (!user) {
var err = new Error('User not found.');
err.status = 401;
return res.json({err});
} else {
require('bcrypt').compare(req.body.password, user.password, function(err, result) {
if(result === true) {
return res.json({user});
} else {
return res.json({err});
}
});
}
});
}
尽管风帆水线不如直接访问任何一个数据库那么强大,但它可以在这里做你想做的事情等等。该文档给出了什么是可能的一些很好的例子。
我不知道你是如何将用户名或电子邮件传递给你的请求对象的,但这样的事情应该可以工作:
authenticate: function(req, res) {
var username = req.param('username'); // or however you get this
var email = req.param('email'); // or however you get this
Users.findOne({
or: [{username: username}, {email: email}]
}).exec(function(err, user) {
// handle the error, or make use of found user...
});
}
您还可以处理用户向您提供可以是用户名或电子邮件的输入的情况...
var identifier = req.param('identifier'); // could be a username or an email
然后将您的or
数组修改为:
or: [{username: identifer}, {email: identifier}]
如果你使用action 2风格,你可以做```
var identifier = inputs.identifier;
var userRecord = await User.findOne({
or : [{username: identifier}, {email: identifier}]
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句