在MongoDB中创建手动管理员用户

时间:2015-07-01 04:42:58

标签: node.js mongodb mongodb-query

Hii我正在使用Node.js + MongoDB运行一个网站。一位自由职业者帮助我设置了所有的运行,但现在不幸的是没有响应。

我有一个设置,我记得他告诉我第一个管理员用户将以编程方式创建,用户可以通过简单的SignUp选项创建。我正在尝试在我的本地副本上测试一些内容,因为该本地副本只创建了一个只有数据库但没有用户的新副本。我能够通过SignUp创建普通用户,但我无法创建所需的管理员用户。

我不知道如何在MongoDB中工作,但我试图参考手册并尝试以下命令:

mongo -- shell : It made me enter the Mongo console .

show databases : Showed me two vix Automator and local . 

I know Automator must be mine since that's what my project is called .

Then I typed : use automator and entered the database

I typed there show collections ; and got the following output :

box
device
gcm
system.indexes
user

我想用户是我应该能够创建管理员和其他用户的集合,但我不确定这是否正确,我不知道如何。我已经创建了一个普通用户,可以在我的本地副本上登录,但我也没有在任何地方看到该用户。

继续我的研究,我执行了以下命令:

> var schematodo = db.user.findOne();
> for (var key in schematodo) { print (key) ; }


Output :

id
fullname
address
phone
city
state
country
email
admin
api
passwordFailures
encrypted_password
salt
createdAt
updatedAt

尝试了db.user.find()。pretty()

输出:我看到我使用注册方法创建的正常测试用户详细信息。如何以相同的方式创建管理员?是否通过设置键Admin = true?

输出:

{
    "_id" : ObjectId("558c1c3d14635a3518d21d15"),
    "fullname" : "Diwesh Sacena",
    "address" : "Testing Lab",
    "phone" : "0106666666",
    "city" : "Seoul",
    "state" : "Seoul",
    "country" : "Korea",
    "email" : "tut@gmail.com",
    "admin" : false,
    "api" : false,
    "passwordFailures" : 0,
    "encrypted_password" : "$2a$06$U31sneJr6zudiY0eo79.7.cWCSBpfLGcCI7d2limq59V6RKNwXT9S",
    "salt" : "$2a$06$U31sneJr6zudiY0eo79.7.",
    "createdAt" : ISODate("2015-06-25T15:20:29.225Z"),
    "updatedAt" : ISODate("2015-06-25T15:20:29.225Z")
}

同时查看源代码我找到了一个名为User.js的文件,其中包含相同的架构信息,也许你可以看看这个并帮助:(

user.js的

/**
 * User.js
 *
 * @description ::
 * @docs        :: http://sailsjs.org/#!documentation/models
 */

module.exports = {

  schema: true,

  attributes: {
    fullname: {
      type: 'string',
      required: true
    },

    email: {
      type: 'string',
      email: true,
      required: true,
      unique: true
    },

    admin: {
      type: 'boolean',
      defaultsTo: false
    },

    api: {
      type: 'boolean',
      defaultsTo: false
    },

    state: {
      type: 'string'
    },

    city: {
      type: 'string'
    },

    country: {
      type: 'string'
    },

    address: {
      type: 'string'
    },

    phone: {
      type: 'string',
      required: true
    },

    encrypted_password: {
      type: 'string'
    },

    salt: {
      type: 'string'
    },

    passwordFailures: {
      type: 'integer',
      defaultsTo: 0
    },

    lastPasswordFailure: {
      type: 'datetime'
    },
    resetToken: {
      type: 'string'
    },

    toJSON: function () {
      var obj = this.toObject();

      return {
        id: obj.id,
        fullname: obj.fullname,
        admin: obj.admin
      }
    },

    validatePassword: function (password, next) {
      if (!password || password.length === 0) {
        return next(null, false);
      }

      var obj = this.toObject();

      UserManager.hashPassword(password, obj.salt, function (err, hashedPassword) {
        if (err) return next(err);

        next(null, hashedPassword === obj.encrypted_password);
      })
    }
  },

  beforeCreate: function (values, next) {
    if (!values.password || values.password != values.confirmation) {
      return next({
        message: "Password doesn't match password confirmation."
      })
    }

    var _salt = null;
    UserManager.hashPassword(values.password, _salt, function (err, password, salt) {
      if (err) return next(err);

      values.encrypted_password = password;
      values.salt = salt;
      next();
    })
  }
}

这些是我的源文件夹中的更多文件:如果您认为其中任何一个适合您检查,请告诉我,我也可以发布该文件:

enter image description here

请帮助如何继续:(

尝试:db.user.update({_id: ObjectId("558c1c3d14635a3518d21d15")},{admin: true})

输出:

> db.user.update({_id: ObjectId("558c1c3d14635a3518d21d15")},{admin: true})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })


> db.user.find().pretty()
{ "_id" : ObjectId("558c1c3d14635a3518d21d15"), "admin" : true }

但是现在我无法使用与此帐户相关联的ID登录。另外你现在可以看到find()。pretty()取代了用户的所有细节,基本上更新了它们:(

1 个答案:

答案 0 :(得分:0)

在寻求几位专家的帮助后,我终于能够解决问题了,虽然我的案例更具体,因为我的网络程序具有某些功能,我可以将普通用户提升为管理员。但是,我想发布一个快速参考,您也可以使用MongoDb手册,但这些步骤可以按顺序用于提取大部分数据。

mongo --shell : start momgo shell in terminal

show databases : shows all databases

show collections : shows all collections inside that database

db.collectionName.find().pretty() : shows the collection schema with complete details and existing data 


To make the first admin :

1. Make a normal user through signup 

2. db.user.update({_id: ObjectId("5593aa85dab6c3b33a853ef4")},{ $set:{admin: true} }) 

where ObjectID is can be seen from find().pretty()  and "user" is the name of your collection in the database .