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