Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // routes/api/users.js
- const express = require("express");
- const bcrypt = require("bcrypt");
- const jwt = require("jsonwebtoken");
- const keys = require("../../config/keys");
- const passport = require("passport");
- const gravatar = require("gravatar");
- const router = express.Router();
- // Load Input Validation
- const validateRegisterInput = require("../../validation/register");
- const validateLoginInput = require("../../validation/login");
- // Load User model
- const User = require("../../models/User");
- // @route GET api/users/all
- // @desc Tests usters route
- // @access Public
- router.get('/all', (req, res) => {
- const errors = {};
- User.find()
- .populate('user', ['name', 'avatar'])
- .then(users => {
- if (!users) {
- errors.nousers = 'There are no users';
- return res.status(404).json(errors);
- } else {
- res.json(users);
- }
- })
- .catch(err => res.status(404).json({
- user: 'There are no users'
- }));
- });
- // @route POST api/users/register
- // @desc Register user
- // @access Public
- router.post("/register", (req, res) => {
- const { errors, isValid } = validateRegisterInput(req.body);
- // Check Validation
- if (!isValid) {
- return res.status(400).json(errors);
- }
- User.findOne({
- email: req.body.email
- }).then(user => {
- if (user) {
- return res.status(400).json({
- email: "Email already exist!"
- });
- } else {
- const avatar = gravatar.url(req.body.email, {
- s: "200", // size
- r: "pg", // rating
- d: "retro" // default
- });
- const newUser = new User({
- name: req.body.name,
- email: req.body.email,
- avatar,
- password: req.body.password
- });
- // salting 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))
- .catch(err => console.log(err));
- });
- });
- }
- });
- });
- // @route GET api/users/login
- // @desc Login user / Returning JWT token
- // @access Public
- router.post("/login", (req, res) => {
- const { errors, isValid } = validateLoginInput(req.body);
- // Check Validation
- if (!isValid) {
- return res.status(400).json(errors);
- }
- const email = req.body.email;
- const password = req.body.password;
- // Find user by email
- User.findOne({
- email
- }).then(user => {
- // check for user
- if (!user) {
- errors.email = "User not found";
- return res.status(404).json(errors);
- }
- // check password
- bcrypt.compare(password, user.password).then(isMatch => {
- if (isMatch) {
- // User matched
- const payload = {
- id: user.id,
- name: user.name,
- avatar: user.avatar
- }; // Create JWT Payload
- // Sign Token
- jwt.sign(
- payload,
- keys.secretOrKey,
- {
- // one hour
- expiresIn: 3600
- },
- (err, token) => {
- res.json({
- success: true,
- token: `Bearer ${token}`
- });
- }
- );
- } else {
- return res.status(400).json({
- password: "Password incorrect!"
- });
- }
- });
- });
- });
- // @route GET api/users/current
- // @desc Return current user
- // @access Private
- router.get(
- "/current",
- passport.authenticate("jwt", {
- session: false
- }),
- (req, res) => {
- res.json({
- id: req.user.id,
- name: req.user.name,
- email: req.user.email
- });
- }
- );
- module.exports = router;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement