add user db model
This commit is contained in:
parent
ad14a07114
commit
8016a62c99
1 changed files with 58 additions and 0 deletions
58
nodejs/models/users.js
Normal file
58
nodejs/models/users.js
Normal file
|
@ -0,0 +1,58 @@
|
|||
var mysql = require('mysql');
|
||||
var config = require('../config');
|
||||
var crypto = require('crypto');
|
||||
var jwt = require('jsonwebtoken');
|
||||
|
||||
var connection = mysql.createConnection({
|
||||
host: config.mysql_host,
|
||||
user: config.mysql_user,
|
||||
password: config.mysql_secret,
|
||||
database: config.mysql_database
|
||||
});
|
||||
|
||||
connection.connect();
|
||||
|
||||
var Users = function () {
|
||||
connection.query('CREATE TABLE IF NOT EXISTS users ( id INT(12) NOT NULL AUTO_INCREMENT, name VARCHAR(200) NOT NULL, salt VARCHAR(32) NOT NULL, hash VARCHAR(128) NOT NULL, UNIQUE (name), PRIMARY KEY (id) )'
|
||||
, function(err, rows, fields) {
|
||||
if (err) throw err;
|
||||
});
|
||||
}
|
||||
|
||||
Users.prototype.findById = function(id, callback) {
|
||||
connection.query('SELECT * FROM users WHERE id = ?', [id], callback);
|
||||
}
|
||||
|
||||
Users.prototype.findByName = function(name, callback) {
|
||||
connection.query('SELECT * FROM users WHERE name = ?', [name.toLowerCase()], callback);
|
||||
}
|
||||
|
||||
Users.prototype.validPassword = function (password, result) {
|
||||
return result.hash === crypto.pbkdf2Sync(password, result.salt, 1000, 64).toString('hex');
|
||||
};
|
||||
|
||||
Users.prototype.add = function(name, password, callback) {
|
||||
var u = {
|
||||
name: name.toLowerCase()
|
||||
};
|
||||
|
||||
u.salt = crypto.randomBytes(16).toString('hex');
|
||||
u.hash = crypto.pbkdf2Sync(password, u.salt, 1000, 64).toString('hex');
|
||||
connection.query('INSERT INTO users SET ?', u, callback);
|
||||
}
|
||||
|
||||
Users.prototype.generateJWT = function (id, username) {
|
||||
|
||||
var today = new Date();
|
||||
var exp = new Date(today);
|
||||
exp.setDate(today.getDate() + 60);
|
||||
|
||||
return jwt.sign({
|
||||
_id: id,
|
||||
username: username,
|
||||
exp: parseInt(exp.getTime() / 1000),
|
||||
}, config.crypto_secret);
|
||||
|
||||
};
|
||||
|
||||
module.exports = Users;
|
Reference in a new issue