Sails.js Sails js,使用电子邮件或用户名查找用户

Sails.js Sails js,使用电子邮件或用户名查找用户,sails.js,Sails.js,我试图登录用户使用用户名或电子邮件,即用户可以输入电子邮件或密码,应该能够登录。然而,到目前为止,我能够使用其中一个 这是迄今为止尝试的代码 authenticate: function (req, res) { var username = req.body.username; var email = req.body.email; users.findOne({ or: [ {username: userna

我试图登录用户使用用户名或电子邮件,即用户可以输入电子邮件或密码,应该能够登录。然而,到目前为止,我能够使用其中一个

这是迄今为止尝试的代码

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});
                }
            });
        }
    });
}

虽然sails waterline不如直接访问任何一个db强大,但它可以在这里做您想要做的事情,甚至更多。这篇文章给出了一些可能的例子

我不知道您是如何将用户名或电子邮件传递给您的请求对象的,但类似的方法应该可以工作:

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: [{username: identifer}, {email: identifier}]
如果使用action 2样式,则可以执行以下操作 ```

var identifier = inputs.identifier;
    var userRecord = await User.findOne({
      or : [{username: identifier}, {email: identifier}]
    });

我正在请求正文中传递参数。请参阅更新的代码,我使用了您的建议,但将循环结构转换为JSONTry时出错,将用户或错误放在res.json中,而不是{user}或{error}。在使用res结束之前,是否可以使用console.logs查看是否获得预期结果?用户肯定应该是可编程的,但是错误可能有一些循环引用。可能res.senderror会起作用。抱歉,这是我的错误,我只提供了一个参数。很有效,谢谢你的帮助和时间。