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;
}
userManager.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) が終了する前にこの関数が結果を返すためだと思いますが、どうすればよいかわかりません。
ご協力ありがとうございました。