user.controller.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. /**
  2. * Created by zhengguorong on 16/11/1.
  3. */
  4. const User = require('./user.model')
  5. const config = require('../../config')
  6. const jwt = require('jsonwebtoken')
  7. /**
  8. * 处理提交表单验证错误
  9. * @param res
  10. * @param statusCode
  11. * @returns {Function}
  12. */
  13. const validationError = (res, statusCode) => {
  14. statusCode = statusCode || 422;
  15. return function (err) {
  16. return res.status(statusCode).json(err);
  17. };
  18. }
  19. const handleError = (res, statusCode) => {
  20. statusCode = statusCode || 500;
  21. return function (err) {
  22. return res.status(statusCode).send(err);
  23. };
  24. }
  25. module.exports.index = (req, res) => {
  26. return User.find({}, '-salt -password').exec()
  27. .then(users => {
  28. res.status(200).json(users);
  29. })
  30. .catch(handleError(res));
  31. }
  32. module.exports.findByToken = (token) => {
  33. return User.findOne({ token: token }).exec()
  34. }
  35. /**
  36. * 创建用户
  37. * @param req
  38. * @param res
  39. */
  40. module.exports.create = (req, res) => {
  41. let newUser = new User(req.body)
  42. newUser.provider = 'local'
  43. newUser.role = 'user'
  44. newUser.save()
  45. .then((user) => {
  46. let token = jwt.sign({ _id: user._id }, config.secrets.session, {
  47. expiresIn: 60 * 60 * 5
  48. })
  49. user.token = token
  50. var updateUser = JSON.parse(JSON.stringify(user))
  51. delete updateUser._id
  52. User.findOneAndUpdate({ _id: user._id }, updateUser).exec()
  53. res.json({ token })
  54. })
  55. .catch(validationError(res))
  56. }
  57. /**
  58. * 获取单个用户信息
  59. */
  60. module.exports.show = (req, res, next) => {
  61. let userId = req.params.id
  62. return User.findById(userId).exec()
  63. .then(user => {
  64. if (!user) {
  65. return res.status(400).end()
  66. }
  67. res.json(user.profile)
  68. })
  69. .catch(err => next(err))
  70. }
  71. /**
  72. * 删除用户
  73. * @param req
  74. * @param res
  75. * @returns {Promise.<TResult>|Promise}
  76. */
  77. module.exports.destroy = (req, res) => {
  78. return User.findByIdAndRemove(req.params.id).exec()
  79. .then(() => {
  80. res.status(204).end()
  81. })
  82. .catch(handleError(res))
  83. }
  84. /**
  85. * 修改密码
  86. * @param req
  87. * @param res
  88. * @returns {Promise.<TResult>}
  89. */
  90. module.exports.changePassword = (req, res) => {
  91. var uesrId = req.user._id
  92. var oldPass = String(req.body.oldPassword)
  93. var newPass = String(req.body.newPassword)
  94. return User.findById(uesrId).exec()
  95. .then(user => {
  96. if (user.authenticate(oldPass)) {
  97. user.password = newPass
  98. return user.save()
  99. .then(() => {
  100. res.status(204).end()
  101. })
  102. .catch(validationError(res))
  103. } else {
  104. return res.status(403).end()
  105. }
  106. })
  107. }
  108. /**
  109. * 用户登陆
  110. * @param req
  111. * @param res
  112. * @returns {Promise.<TResult>}
  113. */
  114. module.exports.login = (req, res) => {
  115. var loginId = req.body.loginId
  116. var password = req.body.password
  117. let token
  118. return User.findOne({ loginId: loginId }).exec()
  119. .then(user => {
  120. if (user && user.authenticate(password)) {
  121. token = jwt.sign({ _id: user._id }, config.secrets.session, {
  122. expiresIn: 60 * 60 * 5
  123. })
  124. user.token = token
  125. var updateUser = JSON.parse(JSON.stringify(user))
  126. delete updateUser._id
  127. User.findOneAndUpdate({ _id: user._id }, updateUser).exec()
  128. res.status(200).json({ token }).end()
  129. } else {
  130. return res.status(401).end()
  131. }
  132. })
  133. }
  134. /**
  135. * 查看用户信息
  136. * @param req
  137. * @param res
  138. * @param next
  139. * @returns {Promise.<TResult>|Promise}
  140. */
  141. module.exports.me = (req, res, next) => {
  142. var userId = req.user._id
  143. return User.findOne({ _id: userId }, '-salt -password').exec()
  144. .then(user => { // don't ever give out the password or salt
  145. if (!user) {
  146. return res.status(401).end();
  147. }
  148. res.json(user);
  149. })
  150. .catch(err => next(err));
  151. }