UNPKG

create-exam-project

Version:

Create exam projects with React + Express + PostgreSQL in seconds

112 lines (98 loc) 3.2 kB
const express = require('express'); const router = express.Router(); const { body, validationResult } = require('express-validator'); const jwt = require('jsonwebtoken'); const { User } = require('../models'); // Регистрация router.post('/register', [ body('login').isLength({ min: 4 }).matches(/^[а-яА-ЯёЁa-zA-Z0-9]+$/), body('password').isLength({ min: 6 }), body('fullName').matches(/^[а-яА-ЯёЁ\s]+$/), body('phone').matches(/^\+7\(\d{3}\)-\d{3}-\d{2}-\d{2}$/), body('email').isEmail() ], async (req, res) => { try { const errors = validationResult(req); if (!errors.isEmpty()) { return res.status(400).json({ errors: errors.array() }); } const { login, password, fullName, phone, email } = req.body; // Проверка уникальности логина const existingUser = await User.findOne({ where: { login } }); if (existingUser) { return res.status(400).json({ message: 'Пользователь с таким логином уже существует' }); } // Создание пользователя const user = await User.create({ login, password, fullName, phone, email }); // Генерация токена const token = jwt.sign( { id: user.id, login: user.login, role: user.role }, process.env.JWT_SECRET, { expiresIn: '7d' } ); res.status(201).json({ message: 'Регистрация успешна', token, user: { id: user.id, login: user.login, fullName: user.fullName, email: user.email, role: user.role } }); } catch (error) { console.error(error); res.status(500).json({ message: 'Ошибка при регистрации' }); } }); // Авторизация router.post('/login', [ body('login').notEmpty(), body('password').notEmpty() ], async (req, res) => { try { const errors = validationResult(req); if (!errors.isEmpty()) { return res.status(400).json({ errors: errors.array() }); } const { login, password } = req.body; // Поиск пользователя const user = await User.findOne({ where: { login } }); if (!user) { return res.status(401).json({ message: 'Неверный логин или пароль' }); } // Проверка пароля const isPasswordValid = await user.validatePassword(password); if (!isPasswordValid) { return res.status(401).json({ message: 'Неверный логин или пароль' }); } // Генерация токена const token = jwt.sign( { id: user.id, login: user.login, role: user.role }, process.env.JWT_SECRET, { expiresIn: '7d' } ); res.json({ message: 'Авторизация успешна', token, user: { id: user.id, login: user.login, fullName: user.fullName, email: user.email, role: user.role } }); } catch (error) { console.error(error); res.status(500).json({ message: 'Ошибка при авторизации' }); } }); module.exports = router;