lockit-sql-adapter

    0.5.3 • Public • Published

    Lockit SQL adapter

    Build Status NPM version

    SQL adapter for Lockit.

    Installation

    npm install lockit-sql-adapter

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

    The adapter is built on top of sequelize. The following databases are supported:

    • MySQL
    • MariaDB (not yet tested but should work)
    • SQLite
    • PostgreSQL

    You have to install the connector for your database of choice manually.

    npm install pg       # for postgres
    npm install mysql    # for mysql
    npm install sqlite3  # for sqlite
    npm install mariasql # for mariasql
    

    Configuration

    The following settings are required.

    // for postgres
    exports.db = {
      url: 'postgres://127.0.0.1:5432/',
      name: 'users',
      collection: 'my_user_table'  // table name
    };
     
    // for mysql
    // exports.db = {
    //   url: 'mysql://127.0.0.1:3306/',
    //   name: 'users',
    //   collection: 'my_user_table'  // table name
    // };
     
    // for sqlite
    // exports.db = {
    //   url: 'sqlite://',
    //   name: ':memory:',
    //   collection: 'my_user_table'  // table name
    // };

    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

    • _id: unique id
    • name: username chosen during sign up
    • email: email that was provided at the beginning
    • salt: salt generated by crypto.randomBytes()
    • derived_key: password hash generated by pbkdf2
    • 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
    adapter.save('john', 'john@email.com', 'secret', function(err, user) {
      if (err) console.log(err);
      console.log(user);
      // {
      //   _id: 1,
      //   name: 'john',
      //   email: 'john@email.com',
      //   derived_key: 'c4c7a83f7b3936437798316d4c7b8c7b731a55dc',
      //   salt: 'ff449a4980a58a80c4ed80bddd34b8c9',
      //   signupToken: '13eefbe7-6bc8-43f5-b27f-0bf0ca98b8db',
      //   signupTimestamp: Fri Apr 11 2014 21:37:47 GMT+0200 (CEST),
      //   signupTokenExpires: Sat Apr 12 2014 21:37:47 GMT+0200 (CEST),
      //   failedLoginAttempts: 0,
      //   emailVerificationTimestamp: null,
      //   emailVerified: null,
      //   pwdResetToken: null,
      //   pwdResetTokenExpires: null,
      //   accountLocked: null,
      //   accountLockedUntil: null,
      //   previousLoginTime: null,
      //   previousLoginIp: null,
      //   currentLoginTime: null,
      //   currentLoginIp: null
      // }
    });

    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);
      // {
      //   _id: 1,
      //   name: 'john',
      //   email: 'john@email.com',
      //   derived_key: '75b43d8393715cbf476ee55b12f888246d7f7015',
      //   salt: 'f39f9a5104e5ae61347dced750b63b16',
      //   signupToken: '6c93c6f8-06b6-4c6d-be58-1e89e8590d0f',
      //   signupTimestamp: Fri Apr 11 2014 21:39:28 GMT+0200 (CEST),
      //   signupTokenExpires: Sat Apr 12 2014 21:39:28 GMT+0200 (CEST),
      //   failedLoginAttempts: 0,
      //   emailVerificationTimestamp: null,
      //   emailVerified: null,
      //   pwdResetToken: null,
      //   pwdResetTokenExpires: null,
      //   accountLocked: null,
      //   accountLockedUntil: null,
      //   previousLoginTime: null,
      //   previousLoginIp: null,
      //   currentLoginTime: null,
      //   currentLoginIp: null
      // }
    });

    3. Update user

    adapter.update(user, callback)

    • user: Object - must have _id key
    • 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.firstOldKey = 'and some value';
      user.secondOldKey = true;
     
      // save updated user to db
      adapter.update(user, function(err, user) {
        if (err) console.log(err);
        // ...
      });
    });

    4. Delete 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

    Install

    npm i lockit-sql-adapter

    DownloadsWeekly Downloads

    25

    Version

    0.5.3

    License

    MIT

    Last publish

    Collaborators

    • zemirco