我正在尝试向我的 Express 路径添加基本身份验证。为了检查用户/密码组合是否正确,我读取了 MongoDB 数据库中的用户模型集合。这是我的代码:
服务器.js
var normal = express.basicAuth(normalAuth);
app.get('path', normal, function(req, res){etc.});
function normalAuth(user, pass) {
var mongo = require('./database/userManager');
var result = false;
mongo.start(mongo.list(function(err, data) {
if(err) { throw err; }
else {
console.log('Getting list from db...');
for(var i in data) {
console.log('Getting details from db...');
if(user == data[i].name && pass == data[i].pass) {
console.log('New connection : ' + user);
result = true;
break;
}
else {
console.log('Failed connection : ' + user);
result = false;
}
}
console.log('OK');
}
mongo.mongoose.connection.close();
}));
return result;
}
用户管理器.js
var mongoose = require('mongoose');
var userModel = mongoose.connection.model('usermodel', new mongoose.Schema({
name: String,
pass: String,
status: { type: Boolean, default: false }
}), 'usermodels');
function start(callback) {
mongoose.connect('mongodb://localhost/derp', function(err) {
if(err) { throw err; }
else {
console.log('Connected to database ');
}
});
}
function list(callback) {
userModel.find(callback);
}
身份验证几乎可以正常工作,它连接到数据库并获取信息。它在控制台上打印
"New connection : /*user connected*/".
但是有一个问题:我的函数 normalAuth 总是返回 false,所以即使我有正确的用户/密码,我也无法访问页面并且我有连接窗口,就好像我给了错误的用户/密码一样。我猜是因为这个函数在我的 mongo.start(blabla) 完成之前返回了结果,但我不知道该怎么做。
谢谢您的帮助。