Advertisement
Guest User

Untitled

a guest
Apr 19th, 2016
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.61 KB | None | 0 0
  1. var bcrypt = require('bcrypt'),
  2. _ = require('underscore'),
  3. cryptojs = require('crypto-js'),
  4. jwt = require('jsonwebtoken');
  5.  
  6. module.exports = function(sequelize, DataTypes) {
  7. var user = sequelize.define('user', {
  8. email: {
  9. type: DataTypes.STRING,
  10. alllowNull: false,
  11. unique: true,
  12. validate: {
  13. isEmail: true
  14. }
  15. },
  16. salt: {
  17. type: DataTypes.STRING
  18. },
  19. password_hash: {
  20. type: DataTypes.STRING
  21. },
  22. password: {
  23. type: DataTypes.VIRTUAL,
  24. alllowNull: false,
  25. validate: {
  26. len: [7, 100]
  27. },
  28. set: function (value) {
  29. var salt = bcrypt.genSaltSync(10),
  30. hashedPassword = bcrypt.hashSync(value, salt);
  31.  
  32. this.setDataValue('password', value);
  33. this.setDataValue('salt', salt);
  34. this.setDataValue('password_hash', hashedPassword);
  35. }
  36. }
  37. }, {
  38. hooks: {
  39. beforeValidate: function(user, option) {
  40. if (typeof user.email === 'string') {
  41. user.email = user.email.toLowerCase();
  42. }
  43. }
  44. },
  45. classMethods: {
  46. authenticate: function (body) {
  47. return new Promise(function (resolve, reject) {
  48.  
  49. if (typeof body.email !== 'string' || typeof body.password !== 'string') {
  50. return reject();
  51. }
  52.  
  53. body.email = body.email.toLowerCase();
  54.  
  55. user.findOne({
  56. where: {
  57. email: body.email
  58. }
  59. }).then(function(user) {
  60. if (!user || !bcrypt.compareSync(body.password, user.get('password_hash'))) {
  61. return reject();
  62. }
  63.  
  64. resolve(user);
  65.  
  66. }, function(e) {
  67. reject();
  68. });
  69.  
  70. });
  71. },
  72. findByToken: function (token) {
  73. return new Promise(function (resolve, reject) {
  74. try {
  75. var decodedJWT = jwt.verify(token, 'qwerty2wq');
  76. var bytes = cryptojs.AES.decrypt(decodedJWT.token, 'abc123!@#!');
  77. var tokenData = JSON.parse(bytes.toString(cryptojs.enc.Utf8));
  78.  
  79. user.findById(tokenData.id).then(function (user) {
  80. if (user) {
  81. resolve(user);
  82. } else {
  83. reject();
  84. }
  85. }, function (e) {
  86. reject();
  87. });
  88. } catch (e) {
  89. reject();
  90. }
  91. });
  92. }
  93. },
  94. instanceMethods: {
  95. toPublicJSON: function () {
  96. var json = this.toJSON();
  97. return _.pick(json, 'id', 'email', 'updatedAt', 'createdAt');
  98. },
  99. generateToken: function (type) {
  100. if (!_.isString(type)) {
  101. return undefined;
  102. }
  103.  
  104. try {
  105. var stringData = JSON.stringify({id: this.get('id'), type: type});
  106. var encryptedData = cryptojs.AES.encrypt(stringData, 'abc123!@#!').toString();
  107. var token = jwt.sign({
  108. token: encryptedData
  109. }, 'qwerty2wq');
  110.  
  111. return token;
  112. } catch (e) {
  113. return undefined;
  114. }
  115. }
  116. }
  117. });
  118.  
  119. return user;
  120. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement