lockit-mongodb-adapter

MongoDB adapter for lockit

npm install lockit-mongodb-adapter
4 downloads in the last day
22 downloads in the last week
54 downloads in the last month

Lockit MongoDB adapter

Build Status NPM version

MongoDB adapter for Lockit.

Installation

npm install lockit-mongodb-adapter

var adapter = require('lockit-mongodb-adapter');

Configuration

The following setting is required.

exports.db = {
  url: 'mongodb://127.0.0.1/',
  name: 'test',
  collection: 'users'
};

Features

1. Create user

adapter.save(name, email, pass, callback)

  • name: String - i.e. 'john'
  • email: String - i.e. 'john@email.com'
  • pass: String - i.e. 'password123'
  • callback: Function - callback(err, user) where user is the new user now in our database.

The user object has the following properties

  • name: username chosen during sign up
  • email: email that was provided at the beginning
  • signupTimestamp: Date object to remember when the user signed up
  • signupToken: unique token sent to user's email for email verification
  • signupTokenExpires: Date object usually 24h ahead of signupTimestamp
  • failedLoginAttempts: save failed login attempts during login process, default is 0
  • salt: salt generated by crypto.randomBytes()
  • derived_key: password hash generated by pbkdf2
  • _id: document id
adapter.save('john', 'john@email.com', 'secret', function(err, user) {
  if (err) console.log(err);
  console.log(user);
  // {
  //  name: 'john',
  //  email: 'john@email.com',
  //  signupToken: 'ef32a95a-d6ee-405a-8e4b-515b235f7c54',
  //  signupTimestamp: Wed Jan 15 2014 19:08:27 GMT+0100 (CET),
  //  signupTokenExpires: Wed Jan 15 2014 19:08:27 GMT+0100 (CET),
  //  failedLoginAttempts: 0,
  //  salt: '48cf9da376703199c30ba5c274580c98',
  //  derived_key: '502967e5a6e55091f4c2c80e7989623f051070fd',
  //  _id: 52d6ce9b651b4d825351641f
  // }
});

2. Find user

adapter.find(match, query, callback)

  • match: String - one of the following: 'name', 'email' or 'signupToken'
  • query: String - corresponds to match, i.e. 'john@email.com'
  • callback: Function - callback(err, user)
adapter.find('name', 'john', function(err, user) {
  if (err) console.log(err);
  console.log(user);
  // {
  //   name: 'john',
  //   email: 'john@email.com',
  //   signupToken: '3a7f0f54-32f0-44f7-97c6-f1470b94c170',
  //   signupTimestamp: Fri Apr 11 2014 21:31:54 GMT+0200 (CEST),
  //   signupTokenExpires: Sat Apr 12 2014 21:31:54 GMT+0200 (CEST),
  //   failedLoginAttempts: 0,
  //   salt: '753981e8d8e30e8047cf5685d1f0a0d4',
  //   derived_key: '18ce03eddab6729aeaaf76729c90cb31f16a863c',
  //   _id: 5348432a98a8a6a4fef1f595
  // }
});

3. Update user

adapter.update(user, callback)

  • user: Object - must have _id and _rev properties
  • callback: Function - callback(err, user) - user is the updated user object
// get a user from db first
adapter.find('name', 'john', function(err, user) {
  if (err) console.log(err);

  // add some new properties to our existing user
  user.newKey = 'and some value';
  user.hasBeenUpdated = true;

  // save updated user to db
  adapter.update(user, function(err, user) {
    if (err) console.log(err);
    // ...
  });
});

4. Remove user

adapter.remove(name, callback)

  • name: String
  • callback: Function - callback(err, res) - res is true if everything went fine
adapter.remove('john', function(err, res) {
  if (err) console.log(err);
  console.log(res);
  // true
});

Test

grunt

License

MIT

npm loves you