Найти в Дзене

Создание авторизации node js

authController

const { User } = require("../models/post");

const bcrypt = require("bcryptjs");

const { validationResult } = require("express-validator");

const jwt = require("jsonwebtoken");

const { SECRET_KEY } = process.env;

const generateAccessToken = (id) => {

 const payload = {

  id,

 };

 return jwt.sign(payload, SECRET_KEY, { expiresIn: "24h" });

};

class authController {

 async registration(req, res) {

  try {

   const errors = validationResult(req);

   if (!errors.isEmpty()) {

    return res.status(400).json({ message: "Некорректные данные" });

   }

   const { login, password, name } = req.body;

   const candidate = await User.findOne({ where: { login } });

   if (candidate) {

    return res

     .status(400)

     .json({ message: "Такой пользователь уже существует" });

   }

   const hashPassword = bcrypt.hashSync(password, 7);

   // const userRole = await Role.findOne({ where: { value: "Админ" } });

   const user = await User.create({

    name,

    login,

    password: hashPassword,

   });

   await user.save();

   return res.json("Пользователь создан");

  } catch (e) {

   console.error(e);

   res.status(500).json({ error: "Произошла ошибка при регистрации" });

  }

 }

 async login(req, res) {

  try {

   const { login, password } = req.body;

   const user = await User.findOne({ where: { login } });

   if (user == "" || password == "") {

    return res.status(400).json({ message: "Заполните все поля" });

   }

   if (!user) {

    return res

     .status(400)

     .json({ message: `Пользователь ${login} не найден` });

   }

   const validPassword = bcrypt.compareSync(password, user.password);

   if (!validPassword) {

    return res.status(400).json({ message: "Неверный пароль" });

   }

   // if (password !== user.password) {

   // return res.status(400).json({ message: "Неверный пароль" });

   // }

   const token = generateAccessToken(user.id);

   return res.json({ token });

  } catch (e) {}

 }

 catch(e) {

  console.log(e);

  res.status(400).json({ message: "Login error" });

 }

 async getUsers(req, res) {

  try {

   const users = await User.findAll();

   res.json(users);

  } catch (e) {

   console.error(e);

   res.status(500).json({ error: "Произошла ошибка при создании роли" });

  }

 }

 async getUser(req, res) {

  try {

   const user = await User.findOne({ where: { id: req.params.id } });

   res.json(user);

  } catch (e) {

   console.error(e);

   res.status(500).json({ error: "1" });

  }

 }

 async deleteUser(req, res) {

  const user = await User.destroy({

   where: {

    id: req.params.id,

   },

  });

  return res.json(user);

 }

 async auth(req, res) {

  try {

   const user = await User.findOne({ where: { id: req.user.id } });

   const token = generateAccessToken(user.id);

   return res.json({

    token,

    user: {

     id: user.id,

     name: user.name,

     login: user.login,

     password: user.password,

    },

   });

  } catch (e) {

   console.log(e);

   res.send({ message: "Server error" });

  }

 }

}

module.exports = new authController();

post controller

const { where } = require("sequelize");

const { Post } = require("../models/post");

class PostController {

 async addPost(req, res) {

  const { title, body } = req.body;

  const post = await Post.create({

   title,

   body,

  });

  return res.json(post);

 }

 async getPost(req, res) {

  const post = await Post.findAll();

  return res.json(post);

 }

 async deletePost(req, res) {

  const post = await Post.destroy({ where: { id: req.params.id } });

  return res.json(post);

 }

 async putPost(req, res) {

  const { title, body } = req.body;

  const post = await Post.update(

   {

    title: title,

    body: body,

   },

   { where: { id: req.params.id } }

  );

  return res.json(post);

 }

}

module.exports = new PostController();

Db.js

const { Sequelize } = require("sequelize");

module.exports = new Sequelize(

 process.env.DB_NAME,

 process.env.DB_USER,

 process.env.DB_PASSWORD,

 {

  dialect: "postgres",

  host: process.env.DB_HOST,

  port: process.env.DB_PORT,

 }

);

index.js

require("dotenv").config();

const express = require("express");

const sequelize = require("./db");

const bodyParser = require("body-parser");

const cors = require("cors");

const router = require("./router/index");

const PORT = process.env.PORT || 5001;

const app = express();

app.use(bodyParser.json());

app.use(bodyParser.urlencoded({ extended: false }));

app.use(cors());

app.use(express.json());

app.use("/api", router);

const start = async () => {

 try {

  await sequelize.authenticate();

  await sequelize.sync();

  app.listen(PORT, () => console.log(`SERVER STARTED ON PORT ${PORT}`));

 } catch (e) {

  console.log(e);

 }

};

start();

models

const { Sequelize, DataTypes } = require("sequelize");

const sequelize = require("../db");

const Post = sequelize.define("post", {

 id: { type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true },

 title: { type: DataTypes.STRING },

 body: { type: DataTypes.STRING },

});

const User = sequelize.define("user", {

 id: { type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true },

 name: { type: DataTypes.STRING },

 login: { type: DataTypes.STRING },

 password: { type: DataTypes.STRING },

});

module.exports = { Post, User };

AuthRouter

const Router = require("express");

const { check } = require("express-validator");

const router = new Router();

const authController = require("../controllers/authController");

router.post(

 "/registration",

 [

  check("login").isLength({ min: 3, max: 25 }),

  check("password").isLength({ min: 3, max: 25 }),

 ],

 authController.registration

);

router.post("/login", authController.login);

router.get("/auth", authController.auth);

router.get("/user", authController.getUsers);

router.get("/user", authController.getUser);

router.delete("/user/:id", authController.deleteUser);

module.exports = router;

index router

const Router = require("express");

const router = new Router();

const postRouter = require("./postRouter");

const authRouter = require("./authRouter");

router.use("/posts", postRouter);

router.use("/auth", authRouter);

module.exports = router;

const Router = require("express");

post router

const router = new Router();

const postController = require("../controllers/postController");

router.post("/", postController.addPost);

router.get("/", postController.getPost);

router.delete("/:id", postController.deletePost);

router.put("/:id", postController.putPost);

module.exports = router;

npm init -y

npm i express sequelize pg pg-hstore body-parser cors dotenv nodemon —save

-2
-3
-4