我正在尝试使用用户名或电子邮件登录用户,即用户可以输入电子邮件或密码,并且应该能够登录。但是,到目前为止,我可以使用其中一个。
这是迄今为止尝试过的代码。
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});
}
});
}
});
}
答案 0 :(得分:1)
虽然sails waterline没有直接访问任何一个db那么强大,但它可以在这里做你想做的事情等等。 docs给出了一些很好的例子。
我不确切知道您是如何通过用户名或电子邮件传递给您的请求对象的,但这样的事情应该有效:
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}]
如果您使用动作2样式,则可以执行此操作 ```
var identifier = inputs.identifier;
var userRecord = await User.findOne({
or : [{username: identifier}, {email: identifier}]
});