Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const express = require('express')
- const router = express.Router()
- const gravatar = require('gravatar')
- const bcrypt = require('bcryptjs')
- const jwt = require('jsonwebtoken')
- // Load User model
- const User = require('../../models/User')
- // @route GET api/users/register
- // @desc Register user
- // @access Public
- router.post('/register', (req, res) => {
- const { name, email, password } = req.body
- User.findOne({
- email
- }).then(user => {
- if (user) return res.status(400).json({ email: 'Email already exists' })
- else {
- const avatar = gravatar.url(email, {
- s: '200', // Size
- r: 'pg', // Rating
- d: 'mm' // Default
- })
- const newUser = new User({
- name,
- email,
- avatar,
- password
- })
- bcrypt.genSalt(10, (err, salt) => {
- bcrypt.hash(newUser.password, salt, (err, hash) => {
- if (err) throw err
- newUser.password = hash
- newUser
- .save()
- .then(user => res.json(user))
- .then(
- console.log(
- `Registered new user: ${newUser.name}, ${newUser.email}`
- )
- )
- .catch(err => console.log(err))
- })
- })
- }
- })
- })
- // @route GET api/users/login
- // @desc Login user / Returning JWT token
- // @access Public
- router.post('/login', (req, res) => {
- const { email, password } = req.body
- // Find user by email
- User.findOne({ email }).then(user => {
- // Check for user
- if (!user) return res.status(404).json({ email: 'User not found' })
- // Check password
- bcrypt.compare(password, user.password).then(isMatch => {
- if (isMatch) {
- // User matched
- const { id, name, avatar } = user
- // Create JWT payload
- const payload = {
- id,
- name,
- avatar
- }
- // Sign token
- const oneDayInSeconds = 60 * 60 * 24
- jwt.sign(
- payload,
- process.env.JWTSECRET,
- { expiresIn: oneDayInSeconds },
- (err, token) => {
- res.json({
- success: true,
- token: 'Bearer ' + token
- })
- }
- )
- } else {
- return res.status(400).json({ password: 'Password incorrect' })
- }
- })
- })
- })
- module.exports = router
Add Comment
Please, Sign In to add comment