user.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. const User = require('../models/user');
  2. const passport = require('passport');
  3. exports.getCurrentUser = function (req, res, next) {
  4. const user = req.user;
  5. if(!user) {
  6. return res.sendStatus(422);
  7. }
  8. return res.json(user);
  9. };
  10. exports.register = function(req, res) {
  11. const registerData = req.body
  12. if (!registerData.email) {
  13. return res.status(422).json({
  14. errors: {
  15. email: 'is required',
  16. message: 'Email is required'
  17. }
  18. })
  19. }
  20. if (!registerData.password) {
  21. return res.status(422).json({
  22. errors: {
  23. password: 'is required',
  24. message: 'Password is required'
  25. }
  26. })
  27. }
  28. if (registerData.password !== registerData.passwordConfirmation) {
  29. return res.status(422).json({
  30. errors: {
  31. password: 'is not the same as confirmation password',
  32. message: 'Password is not the same as confirmation password'
  33. }
  34. })
  35. }
  36. const user = new User(registerData);
  37. return user.save((errors, savedUser) => {
  38. if (errors) {
  39. return res.status(422).json({errors})
  40. }
  41. return res.json(savedUser)
  42. })
  43. }
  44. exports.login = function (req, res, next) {
  45. const { email, password } = req.body
  46. if (!email) {
  47. return res.status(422).json({
  48. errors: {
  49. email: 'is required',
  50. message: 'Email is required'
  51. }
  52. })
  53. }
  54. if (!password) {
  55. return res.status(422).json({
  56. errors: {
  57. password: 'is required',
  58. message: 'Password is required'
  59. }
  60. })
  61. }
  62. return passport.authenticate('local', (err, passportUser) => {
  63. if (err) {
  64. return next(err)
  65. }
  66. if (passportUser) {
  67. req.login(passportUser, function (err) {
  68. if (err) { next(err); }
  69. return res.json(passportUser)
  70. });
  71. } else {
  72. return res.status(422).send({errors: {
  73. 'message': 'Invalid password or email'
  74. }})
  75. }
  76. })(req, res, next)
  77. }
  78. exports.logout = function (req, res) {
  79. req.logout()
  80. return res.json({status: 'Session destroyed!'})
  81. }