Openshift - auth:通过mongojs连接mongodb时无法找到用户

时间:2016-02-24 07:25:22

标签: node.js mongodb openshift restify mongojs

我正在按照本教程在我的openshift帐户中托管Rest 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帐户中运行它并通过输入以下网址发送邮件获取请求时:

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所示):

enter image description here

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

auth错误是由于未对if (sDirectionHashMap.get(idsList.get(position)).equals("incoming")) { holder.messageLayout.setGravity(Gravity.LEFT); } else { holder.messageLayout.setGravity(Gravity.RIGHT); } 用户进行身份验证以访问admin数据库引起的(有关详细信息,请参阅上面的问题评论)。

用户可以使用RockMongo界面进行身份验证,如下所示:
选择一个数据库 - &gt;更多 - &gt;身份验证 - &gt;添加用户。