【发布时间】:2017-01-06 19:04:27
【问题描述】:
我正在为我的应用程序开发身份验证模块。每当用户名和密码发布到 '/admin/login' Api 时,它都会调用 Auth 控制器的登录功能。 此外,我使用猫鼬模型从 MongoDb 中查询并将找到的对象返回给变量。
auth.controller.js
var jwt = require('jwt-simple');
var bcrypt = require('bcrypt');
var User = require('../models/user.model.js');
var secret = require('../config.js').jwt_secret;
var auth = {
login : function (req, res) {
var username = req.body.username;
var password = req.body.password;
if (username === '' || password === '') {
res.status(401).json({message : 'Invalid Credentials'});
return;
}
var dbUserObj = auth.validate(username, password); // receives the User object returned from callback
console.log(dbUserObj); //displays 'undefined'
if (!dbUserObj) {
res.status(401).json({message : 'Invalid Username or Password'});
return;
}
if (dbUserObj) {
console.log('user found');
res.json(genToken(dbUserObj));
}
},
validate : function (user, pass) {
User.findOne({username : user}, function (err, user) {
if (err) {
return;
}
if (user==null) {
console.log('no user found');
return;
} else {
bcrypt.compare(pass, user.password, function (err,result) {
if (result == true) {
return user;
}
});
}
});
}
}
function genToken (user) {
var expires = expiresIn(7);
var token = jwt.encode({exp : expires},secret);
return {
token : token,
exp : expires,
user: user
}
}
function expiresIn (t) {
var dateObj = new Date();
return dateObj.setDate(dateObj.getDate() + numDays);
}
module.exports = auth;
dbUserobject 变量接收 validate 函数返回的 User 对象。但是如果我记录这个变量,它会显示“未定义” 我知道存在回调问题,即下一行代码运行,并且在回调返回对象 dbUserObject 变量被初始化后,它总是发送响应“无效的用户名或密码”,因为 dbUserObject 变得未定义。 试了好几样,都搞不定。
我怎样才能让它像它首先接收 DbUserObj 然后决定是发送无效响应还是生成 Json Web 令牌一样工作。
谢谢,
【问题讨论】:
标签: javascript node.js mongodb mongoose callback