【发布时间】:2016-08-30 23:41:42
【问题描述】:
我有一个从 mysql 数据库中选择用户名并将结果返回到 post 请求的函数,如下所示:
function userAuthentication(user){
var deferred = Q.defer();
pool.getConnection(function(err, connection) {
if (err) {
var dbError = new Error('No db connection');
console.log(dbError);
}
else {
var selectUserName = 'SELECT * FROM User WHERE username= '+connection.escape(user)+' ';
connection.query(selectUserName, function(error, rows){
if(error){
console.log(error);
deferred.reject(error);
}
else if(rows.length === 0){
var countError = new Error('No User Found');
console.log ("Database.js -> "+ countError);
deferred.reject(countError);
}else{
deferred.resolve(rows);
}
});
}
connection.release();
});
return deferred.promise;
}
函数userAuthentication从rout.post请求中调用
router.post('/checkAuthentication', function(request, response) {
database.userAuthentication(request.body.username).then(function(data) {
if(data[0].RowDataPacket!=0){
if(bcrypt.compareSync(request.body.password,data[0].password)){
var token = jwt.sign({
username: data[0].username,
}, superSecret,{
expiresInMinutes: 1440
});
console.log(token);
// return the information including token as JSON
response.json({
success: true,
message: 'Token Created',
token: token
});
}
else{
response.json({ success: false, message: 'Authentication failed. Wrong Password.' });
}
}else{
response.json({ success: false, message: 'Authentication failed. User not found.' });
}
});
});
当我检查输入的用户名和密码是否与 mysqlDb 中的匹配时,我正在尝试创建一个令牌,但不幸的是没有创建令牌; console.log(token) 行没有将任何结果打印到控制台中。我缺少的部分是什么???感谢你们的帮助。
【问题讨论】:
-
您说“
console.log(token)行没有将任何结果打印到控制台”:taht 到底是什么意思?甚至没有执行 console.log 语句吗?如果是,它是否打印一个空字符串,null,undefined...? -
@MarcoS u 对,我将 var 令牌视为变量。如果创建了令牌,如何在控制台中检查?因为即使是下一行,response.json 也没有获取??
-
console.log(token)语句甚至没有执行吗?如果是,它究竟打印了什么? -
控制台没有输出任何东西
-
所以不执行。您应该尝试调试代码流,然后...例如在调用
jwt.sign()之前添加一个console.log('calling jwt.sign()')语句,等等...
标签: node.js authentication token