auth.js 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. const express = require('express');
  2. const bcrypt = require('bcryptjs');
  3. const jwt = require('jsonwebtoken');
  4. const User = require('../models/User');
  5. const { body, validationResult } = require('express-validator');
  6. const router = express.Router();
  7. router.post('/register', [
  8. body('username').notEmpty(),
  9. body('email').isEmail(),
  10. body('password').isLength({ min: 6 }),
  11. ], async (req, res) => {
  12. const errors = validationResult(req);
  13. if (!errors.isEmpty()) return res.status(400).json({ errors: errors.array() });
  14. const { username, email, password } = req.body;
  15. try {
  16. const hashedPassword = await bcrypt.hash(password, 10);
  17. const newUser = new User({ username, email, password: hashedPassword });
  18. await newUser.save();
  19. res.status(201).json({ message: 'User registered successfully' });
  20. } catch (error) {
  21. res.status(500).json({ error: 'Server error' });
  22. }
  23. });
  24. router.post('/login', async (req, res) => {
  25. const { email, password } = req.body;
  26. try {
  27. const user = await User.findOne({ email });
  28. if (!user || !(await bcrypt.compare(password, user.password))) {
  29. return res.status(400).json({ error: 'Invalid credentials' });
  30. }
  31. const token = jwt.sign({ id: user._id }, process.env.JWT_SECRET, { expiresIn: '1h' });
  32. res.json({ token });
  33. } catch (error) {
  34. res.status(500).json({ error: 'Server error' });
  35. }
  36. });
  37. module.exports = router;