diff --git a/backend/src/middleware/authMiddleware.js b/backend/src/middleware/authMiddleware.js new file mode 100644 index 0000000..4ea304d --- /dev/null +++ b/backend/src/middleware/authMiddleware.js @@ -0,0 +1,41 @@ +const jwt = require('jsonwebtoken'); +const { User } = require('../models/User'); + +module.exports = async (req, res, next) => { + try { + // Get token from header + const authHeader = req.headers.authorization; + + if (!authHeader || !authHeader.startsWith('Bearer ')) { + return res.status(401).json({ message: 'Authorization token required' }); + } + + const token = authHeader.split(' ')[1]; + + // Verify token + const decoded = jwt.verify(token, process.env.JWT_SECRET); + + // Find user + const user = await User.findByPk(decoded.id); + + if (!user) { + return res.status(401).json({ message: 'User not found' }); + } + + // Attach user to request + req.user = user; + next(); + } catch (error) { + console.error('Authentication error:', error); + + if (error.name === 'JsonWebTokenError') { + return res.status(401).json({ message: 'Invalid token' }); + } + + if (error.name === 'TokenExpiredError') { + return res.status(401).json({ message: 'Token expired' }); + } + + res.status(500).json({ message: 'Server error during authentication' }); + } +}; \ No newline at end of file