/
lostSun
/
project-client-server-apps
Обзор
Документация
Войти
/
lostSun
/
project-client-server-apps
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
server/src/routes/auth.js
95 строк
3 KB
1lostsun
update project
25 май 2025, 13:12
25 май 2025, 13:12
78a0079
Код
Авторство
О чём код?
const express = require('express'); const router = express.Router(); const bcrypt = require('bcryptjs'); const jwt = require('jsonwebtoken'); const db = require('../db/database'); // Регистрация router.post('/register', async (req, res) => { const { username, email, password } = req.body; try { const hashedPassword = await bcrypt.hash(password, 10); db.run( 'INSERT INTO users (username, email, password) VALUES (?, ?, ?)', [username, email, hashedPassword], function(err) { if (err) { if (err.message.includes('UNIQUE constraint failed')) { return res.status(400).json({ error: 'Username or email already exists' }); } return res.status(500).json({ error: 'Error creating user' }); } const token = jwt.sign( { userId: this.lastID }, process.env.JWT_SECRET || 'your-secret-key', { expiresIn: '24h' } ); res.status(201).json({ token }); } ); } catch (error) { res.status(500).json({ error: 'Server error' }); } }); // Вход router.post('/login', (req, res) => { const { email, password } = req.body; db.get('SELECT * FROM users WHERE email = ?', [email], async (err, user) => { if (err) { return res.status(500).json({ error: 'Server error' }); } if (!user) { return res.status(401).json({ error: 'Invalid credentials' }); } const validPassword = await bcrypt.compare(password, user.password); if (!validPassword) { return res.status(401).json({ error: 'Invalid credentials' }); } const token = jwt.sign( { userId: user.id }, process.env.JWT_SECRET || 'your-secret-key', { expiresIn: '24h' } ); res.json({ token }); }); }); // Получение профиля пользователя router.get('/profile', (req, res) => { const token = req.headers.authorization?.split(' ')[1]; if (!token) { return res.status(401).json({ error: 'No token provided' }); } try { const decoded = jwt.verify(token, process.env.JWT_SECRET || 'your-secret-key'); db.get('SELECT id, username, email, created_at FROM users WHERE id = ?', [decoded.userId], (err, user) => { if (err) { return res.status(500).json({ error: 'Server error' }); } if (!user) { return res.status(404).json({ error: 'User not found' }); } res.json(user); } ); } catch (error) { res.status(401).json({ error: 'Invalid token' }); } }); module.exports = router;