user.controller.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  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 respondWithResult = (res, statusCode) => {
  20. statusCode = statusCode || 200
  21. return function (entity) {
  22. if (entity) {
  23. return res.status(statusCode).json(entity)
  24. }
  25. return null
  26. }
  27. }
  28. const handleError = (res, statusCode) => {
  29. statusCode = statusCode || 500
  30. return function (err) {
  31. return res.status(statusCode).send(err)
  32. }
  33. }
  34. module.exports.index = (req, res) => {
  35. return User.find({}, '-salt -password').exec()
  36. .then(users => {
  37. res.status(200).json(users)
  38. })
  39. .catch(handleError(res))
  40. }
  41. module.exports.findByToken = (token) => {
  42. return User.findOne({ token: token }).exec()
  43. }
  44. /**
  45. * 创建用户
  46. * @param req
  47. * @param res
  48. */
  49. module.exports.create = (req, res) => {
  50. let newUser = new User(req.body)
  51. newUser.provider = 'local'
  52. newUser.role = 'user'
  53. newUser.save()
  54. .then((user) => {
  55. let token = jwt.sign({ _id: user._id }, config.secrets.session, {
  56. expiresIn: 60 * 60 * 5
  57. })
  58. user.token = token
  59. var updateUser = JSON.parse(JSON.stringify(user))
  60. delete updateUser._id
  61. User.findOneAndUpdate({ _id: user._id }, updateUser).exec()
  62. res.json({ token })
  63. })
  64. .catch(validationError(res))
  65. }
  66. /**
  67. * 获取单个用户信息
  68. */
  69. module.exports.show = (req, res, next) => {
  70. let userId = req.params.id
  71. return User.findById(userId).exec()
  72. .then(user => {
  73. if (!user) {
  74. return res.status(400).end()
  75. }
  76. res.json(user.profile)
  77. })
  78. .catch(err => next(err))
  79. }
  80. /**
  81. * 删除用户
  82. * @param req
  83. * @param res
  84. * @returns {Promise.<TResult>|Promise}
  85. */
  86. module.exports.destroy = (req, res) => {
  87. return User.findByIdAndRemove(req.params.id).exec()
  88. .then(() => {
  89. res.status(204).end()
  90. })
  91. .catch(handleError(res))
  92. }
  93. /**
  94. * 修改密码
  95. * @param req
  96. * @param res
  97. * @returns {Promise.<TResult>}
  98. */
  99. module.exports.changePassword = (req, res) => {
  100. var uesrId = req.user._id
  101. var oldPass = String(req.body.oldPassword)
  102. var newPass = String(req.body.newPassword)
  103. return User.findById(uesrId).exec()
  104. .then(user => {
  105. if (user.authenticate(oldPass)) {
  106. user.password = newPass
  107. return user.save()
  108. .then(() => {
  109. res.status(204).end()
  110. })
  111. .catch(validationError(res))
  112. } else {
  113. return res.status(403).end()
  114. }
  115. })
  116. }
  117. /**
  118. * 用户登陆
  119. * @param req
  120. * @param res
  121. * @returns {Promise.<TResult>}
  122. */
  123. module.exports.login = (req, res) => {
  124. var loginId = req.body.loginId
  125. var password = req.body.password
  126. let token
  127. return User.findOne({ loginId: loginId }).exec()
  128. .then(user => {
  129. if (user && user.authenticate(password)) {
  130. token = jwt.sign({ _id: user._id }, config.secrets.session, {
  131. expiresIn: 60 * 60 * 5
  132. })
  133. user.token = token
  134. var updateUser = JSON.parse(JSON.stringify(user))
  135. delete updateUser._id
  136. User.findOneAndUpdate({ _id: user._id }, updateUser).exec()
  137. res.status(200).json({ token }).end()
  138. } else {
  139. return res.status(401).end()
  140. }
  141. })
  142. }
  143. /**
  144. * 退出登录
  145. */
  146. module.exports.logout = (req, res) => {
  147. var userId = req.user._id
  148. return User.findOneAndUpdate({ _id: userId }, { token: '' }).exec()
  149. .then(() => {
  150. res.status(200).end()
  151. })
  152. .catch(handleError(res))
  153. }
  154. /**
  155. * 查看用户信息
  156. * @param req
  157. * @param res
  158. * @param next
  159. * @returns {Promise.<TResult>|Promise}
  160. */
  161. module.exports.me = (req, res, next) => {
  162. var userId = req.user._id
  163. return User.findOne({ _id: userId }, '-salt -password').exec()
  164. .then(user => { // don't ever give out the password or salt
  165. if (!user) {
  166. return res.status(401).end()
  167. }
  168. res.json(user)
  169. })
  170. .catch(err => next(err))
  171. }