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

时间:2017-10-24 08:48:54

标签: sails.js

我正在尝试使用用户名或电子邮件登录用户,即用户可以输入电子邮件或密码,并且应该能够登录。但是,到目前为止,我可以使用其中一个。

这是迄今为止尝试过的代码。

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

1 个答案:

答案 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}]
    });