Mongodb 使用 nodejs 和 Monk 进行身份验证
Mongodb authentication with nodejs and Monk
尝试查询 mongodb 上的集合时,我一直(似乎)在我的 app.js
文件中成功连接到该集合。
var mongo = require('mongodb');
var monk = require('monk');
var db = monk('mongodb://USERNAME:PASSWORD@localhost:27017/test_db');
var app = express();
// Make our db accessible to our router
app.use(function(req,res,next){
req.db = db;
next();
});
它连接,然后在我的路由器文件中:
/* users.js*/
router.post('/login', function(req, res, next) {
var params = req.body;
var userid = params.userid;
var pw = params.password
var db = req.db;
var userdb = db.get('users');
userdb.findOne({'userid' : userid}, function(e,user) {
if (e) {
console.log("error reading user doc ->");
console.log(e);
return;
} else {
....
}
});
});
查询集合后出现以下错误:
{ [MongoError: auth failed] name: 'MongoError', ok: 0, errmsg: 'auth failed', code: 18 }
var db = monk('localhost:27017/test_db', {
username : 'USERNAME',
password : 'PASSWORD'
});
or
var db = monk('USERNAME:PASSWORD@localhost:27017/test_db');
查看 MongoDB 文档以了解选项:
http://mongodb.github.io/node-mongodb-native/2.1/reference/connecting/connection-settings/
您会注意到用户名和密码不是有效选项。如果你连接到 test_db 并且你的 root 用户在另一个数据库中(假设是管理员),你应该使用 authSource: admin。您的连接字符串如下所示:
var db = monk('user:pass@localhost:27017/test_db',{authSource:'admin'});
当我尝试连接到我的数据库但我的 auth 用户在另一个数据库中时,这让我感到困惑。
希望对大家有所帮助!
尝试查询 mongodb 上的集合时,我一直(似乎)在我的 app.js
文件中成功连接到该集合。
var mongo = require('mongodb');
var monk = require('monk');
var db = monk('mongodb://USERNAME:PASSWORD@localhost:27017/test_db');
var app = express();
// Make our db accessible to our router
app.use(function(req,res,next){
req.db = db;
next();
});
它连接,然后在我的路由器文件中:
/* users.js*/
router.post('/login', function(req, res, next) {
var params = req.body;
var userid = params.userid;
var pw = params.password
var db = req.db;
var userdb = db.get('users');
userdb.findOne({'userid' : userid}, function(e,user) {
if (e) {
console.log("error reading user doc ->");
console.log(e);
return;
} else {
....
}
});
});
查询集合后出现以下错误:
{ [MongoError: auth failed] name: 'MongoError', ok: 0, errmsg: 'auth failed', code: 18 }
var db = monk('localhost:27017/test_db', {
username : 'USERNAME',
password : 'PASSWORD'
});
or
var db = monk('USERNAME:PASSWORD@localhost:27017/test_db');
查看 MongoDB 文档以了解选项:
http://mongodb.github.io/node-mongodb-native/2.1/reference/connecting/connection-settings/
您会注意到用户名和密码不是有效选项。如果你连接到 test_db 并且你的 root 用户在另一个数据库中(假设是管理员),你应该使用 authSource: admin。您的连接字符串如下所示:
var db = monk('user:pass@localhost:27017/test_db',{authSource:'admin'});
当我尝试连接到我的数据库但我的 auth 用户在另一个数据库中时,这让我感到困惑。
希望对大家有所帮助!