Guest User

Untitled

a guest
May 18th, 2018
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.29 KB | None | 0 0
  1. const express = require('express')
  2. const router = express.Router()
  3. const gravatar = require('gravatar')
  4. const bcrypt = require('bcryptjs')
  5. const jwt = require('jsonwebtoken')
  6.  
  7. // Load User model
  8. const User = require('../../models/User')
  9.  
  10. // @route GET api/users/register
  11. // @desc Register user
  12. // @access Public
  13. router.post('/register', (req, res) => {
  14. const { name, email, password } = req.body
  15.  
  16. User.findOne({
  17. email
  18. }).then(user => {
  19. if (user) return res.status(400).json({ email: 'Email already exists' })
  20. else {
  21. const avatar = gravatar.url(email, {
  22. s: '200', // Size
  23. r: 'pg', // Rating
  24. d: 'mm' // Default
  25. })
  26.  
  27. const newUser = new User({
  28. name,
  29. email,
  30. avatar,
  31. password
  32. })
  33.  
  34. bcrypt.genSalt(10, (err, salt) => {
  35. bcrypt.hash(newUser.password, salt, (err, hash) => {
  36. if (err) throw err
  37. newUser.password = hash
  38. newUser
  39. .save()
  40. .then(user => res.json(user))
  41. .then(
  42. console.log(
  43. `Registered new user: ${newUser.name}, ${newUser.email}`
  44. )
  45. )
  46. .catch(err => console.log(err))
  47. })
  48. })
  49. }
  50. })
  51. })
  52.  
  53. // @route GET api/users/login
  54. // @desc Login user / Returning JWT token
  55. // @access Public
  56. router.post('/login', (req, res) => {
  57. const { email, password } = req.body
  58.  
  59. // Find user by email
  60. User.findOne({ email }).then(user => {
  61. // Check for user
  62. if (!user) return res.status(404).json({ email: 'User not found' })
  63.  
  64. // Check password
  65. bcrypt.compare(password, user.password).then(isMatch => {
  66. if (isMatch) {
  67. // User matched
  68. const { id, name, avatar } = user
  69.  
  70. // Create JWT payload
  71. const payload = {
  72. id,
  73. name,
  74. avatar
  75. }
  76.  
  77. // Sign token
  78. const oneDayInSeconds = 60 * 60 * 24
  79. jwt.sign(
  80. payload,
  81. process.env.JWTSECRET,
  82. { expiresIn: oneDayInSeconds },
  83. (err, token) => {
  84. res.json({
  85. success: true,
  86. token: 'Bearer ' + token
  87. })
  88. }
  89. )
  90. } else {
  91. return res.status(400).json({ password: 'Password incorrect' })
  92. }
  93. })
  94. })
  95. })
  96.  
  97. module.exports = router
Add Comment
Please, Sign In to add comment