Openshift - 身份验证:通过 mongojs 连接 mongodb 时找不到用户
Openshift - auth: couldn't find user while connecting mongodb via mongojs
我正在按照本教程在我的 openshift 帐户上主持休息 API:
Day 27: Restify–Build Correct REST Web Services in Node.js
根据我的要求我做了一些改动,下面是代码:
server.js
var restify = require('restify');
var mongojs = require('mongojs');
var ip_addr = process.env.OPENSHIFT_NODEJS_IP || '127.0.0.1';
var port = process.env.OPENSHIFT_NODEJS_PORT || 8080;
var server = restify.createServer({name: 'bemeta'});
server.use(restify.queryParser());
server.use(restify.bodyParser());
server.use(restify.CORS());
server.listen(port, ip_addr, function(){
console.log(server.name + ' listening at url ' + server.url);
});
var connectionString = '127.0.0.1:27017/bemeta';
if(process.env.OPENSHIFT_MONGODB_DB_PASSWORD){
connectionString = process.env.OPENSHIFT_MONGODB_DB_USERNAME + ':' +
process.env.OPENSHIFT_MONGODB_DB_PASSWORD + '@' +
process.env.OPENSHIFT_MONGODB_DB_HOST + ':' +
process.env.OPENSHIFT_MONGODB_DB_PORT + '/' +
process.env.OPENSHIFT_APP_NAME;
}
var db = mongojs(connectionString, ['bemeta']);
var beRecords = db.collection("be_records");
var PATH = '/be_records';
// get all records
server.get({path: PATH, version:'0.0.1'}, findAllRecords);
// create new record
server.post({path: PATH, version:'0.0.1'}, createRecord);
// defining call backs
function findAllRecords(req, res, next){
res.setHeader('Access-Control-Allow-Origin', '*');
beRecords.find(function(err, docs){
console.log('Response docs ' + docs);
console.log('Error '+ err);
if(docs){
res.send(200, docs);
return next();
}
return next(err);
});
}
function createRecord(req, res, next){
res.setHeader('Access-Control-Allow-Origin', '*');
var beRecord = {};
beRecord.be_id = req.params.be_id;
beRecord.item_title = req.params.item_title;
beRecord.item_description = req.params.item_description;
beRecord.item_link = req.params.item_link;
beRecords.save(beRecord, function(err, docs){
console.log('Response docs ' + docs);
console.log('Error '+ err);
if(docs){
res.send(201, beRecord);
return next();
}
else {
next(err);
}
});
}
当我 运行 它在本地并通过在下面键入 url:
通过邮递员发出获取请求时
http://127.0.0.1:8080/be_records
我得到的回复是:[]
,这是正确的,因为我没有在相应的集合中插入任何文档。
但是当我 运行 它在我的 openshift 帐户中并通过在下面输入 url:
通过邮递员发出获取请求时
http://bemeta-{domain-name}.rhcloud.com/be_records
我得到的回复是:
{
"code": "InternalError",
"message": "auth fails"
}
在我的 rhc 控制台中,我看到以下消息:
==> app-root/logs/mongodb.log <==
Wed Feb 24 01:32:23.543 [conn3] authenticate db: bemeta { authenticate: 1, user: "admin", nonce: "some nonce", key: "some key" }
Wed Feb 24 01:32:23.544 [conn3] auth: couldn't find user admin@bemeta, bemeta.system.users
我不确定它为什么要尝试查找用户 - admin@bemeta,可能是我在这里遗漏了一些东西,我没有任何这样的用户,但我有一个用于连接到的管理员用户mongodb.
这是我的数据库的快照(如 RockMongo 中所示):
有什么想法吗?
身份验证错误是由于未对 admin
用户访问 bemeta
数据库进行身份验证造成的(有关详细信息,请参阅上面的问题评论)。
用户可以使用 RockMongo 接口进行身份验证,如下所示:
Select 数据库 -> 更多 -> 身份验证 -> 添加用户。
我正在按照本教程在我的 openshift 帐户上主持休息 API:
Day 27: Restify–Build Correct REST Web Services in Node.js
根据我的要求我做了一些改动,下面是代码:
server.js
var restify = require('restify');
var mongojs = require('mongojs');
var ip_addr = process.env.OPENSHIFT_NODEJS_IP || '127.0.0.1';
var port = process.env.OPENSHIFT_NODEJS_PORT || 8080;
var server = restify.createServer({name: 'bemeta'});
server.use(restify.queryParser());
server.use(restify.bodyParser());
server.use(restify.CORS());
server.listen(port, ip_addr, function(){
console.log(server.name + ' listening at url ' + server.url);
});
var connectionString = '127.0.0.1:27017/bemeta';
if(process.env.OPENSHIFT_MONGODB_DB_PASSWORD){
connectionString = process.env.OPENSHIFT_MONGODB_DB_USERNAME + ':' +
process.env.OPENSHIFT_MONGODB_DB_PASSWORD + '@' +
process.env.OPENSHIFT_MONGODB_DB_HOST + ':' +
process.env.OPENSHIFT_MONGODB_DB_PORT + '/' +
process.env.OPENSHIFT_APP_NAME;
}
var db = mongojs(connectionString, ['bemeta']);
var beRecords = db.collection("be_records");
var PATH = '/be_records';
// get all records
server.get({path: PATH, version:'0.0.1'}, findAllRecords);
// create new record
server.post({path: PATH, version:'0.0.1'}, createRecord);
// defining call backs
function findAllRecords(req, res, next){
res.setHeader('Access-Control-Allow-Origin', '*');
beRecords.find(function(err, docs){
console.log('Response docs ' + docs);
console.log('Error '+ err);
if(docs){
res.send(200, docs);
return next();
}
return next(err);
});
}
function createRecord(req, res, next){
res.setHeader('Access-Control-Allow-Origin', '*');
var beRecord = {};
beRecord.be_id = req.params.be_id;
beRecord.item_title = req.params.item_title;
beRecord.item_description = req.params.item_description;
beRecord.item_link = req.params.item_link;
beRecords.save(beRecord, function(err, docs){
console.log('Response docs ' + docs);
console.log('Error '+ err);
if(docs){
res.send(201, beRecord);
return next();
}
else {
next(err);
}
});
}
当我 运行 它在本地并通过在下面键入 url:
通过邮递员发出获取请求时http://127.0.0.1:8080/be_records
我得到的回复是:[]
,这是正确的,因为我没有在相应的集合中插入任何文档。
但是当我 运行 它在我的 openshift 帐户中并通过在下面输入 url:
通过邮递员发出获取请求时http://bemeta-{domain-name}.rhcloud.com/be_records
我得到的回复是:
{
"code": "InternalError",
"message": "auth fails"
}
在我的 rhc 控制台中,我看到以下消息:
==> app-root/logs/mongodb.log <==
Wed Feb 24 01:32:23.543 [conn3] authenticate db: bemeta { authenticate: 1, user: "admin", nonce: "some nonce", key: "some key" }
Wed Feb 24 01:32:23.544 [conn3] auth: couldn't find user admin@bemeta, bemeta.system.users
我不确定它为什么要尝试查找用户 - admin@bemeta,可能是我在这里遗漏了一些东西,我没有任何这样的用户,但我有一个用于连接到的管理员用户mongodb.
这是我的数据库的快照(如 RockMongo 中所示):
有什么想法吗?
身份验证错误是由于未对 admin
用户访问 bemeta
数据库进行身份验证造成的(有关详细信息,请参阅上面的问题评论)。
用户可以使用 RockMongo 接口进行身份验证,如下所示:
Select 数据库 -> 更多 -> 身份验证 -> 添加用户。