import Service from "../Service"; import jwt from "jsonwebtoken"; import {User} from "../../models"; import bcrypt from "bcrypt"; class AuthService extends Service { async auth(token, done) { try { const decoded = jwt.verify(token, process.env.JWT_SECRET); const user = await User.findByPk(decoded.userId); if (!user) { return done(null, false); } else { return done(null, user); } } catch (e) { return done(null, false); } } async login(req, res) { try { // Получаем email и пароль из тела запроса const {username, password} = req.body; // Находим пользователя по username const user = await User.scope('withPassword').findOne({where: {username}}); // Если пользователь не найден, возвращаем ошибку if (!user) { console.log(`User not found ${username}`); return res.status(401).json({message: 'Неверное имя пользователя или пароль'}); } // Сравниваем пароль из запроса с хешированным паролем пользователя const isPasswordValid = await bcrypt.compare(password, user.password); // Если пароль неверный, возвращаем ошибку if (!isPasswordValid) { return res.status(401).json({message: 'Неверное имя пользователя или пароль'}); } // Создаем JWT-токен const token = jwt.sign({userId: user.id}, process.env.JWT_SECRET, { expiresIn: '1h', }); // Возвращаем токен res.json({token}); } catch (error) { console.error(error); res.status(500).json({message: 'Internal server error'}); } } async logout(req, res) { try { // Удаляем токен из заголовка авторизации res.clearCookie('token'); res.json({message: 'Вы успешно вышли из системы'}); } catch (error) { console.error(error); res.status(500).json({message: 'Internal server error'}); } } async generatePasswordHash(req, res) { if (process.env.NODE_ENV === 'development') { // Get passwort from get request const password = req.query.password; // Hash password bcrypt.hash(password, 10, (err, hash) => { if (err) { console.error(err); return res.status(500).json({message: 'Internal server error'}); } console.log(hash) return res.json({hash}); }); } } } export default new AuthService