Files
NoIdle/backend/routes/auth.js

60 lines
1.7 KiB
JavaScript
Raw Normal View History

const express = require('express');
const router = express.Router();
const bcrypt = require('bcrypt');
const jwt = require('jsonwebtoken');
const { query } = require('../config/database');
router.post('/login', async (req, res) => {
try {
const { email, password } = req.body;
if (!email || !password) {
return res.status(400).json({ error: 'Email e senha são obrigatórios' });
}
const result = await query(
'SELECT id, email, name, password, role, company_id, is_active FROM admin_users WHERE email = $1',
[email.toLowerCase()]
);
if (result.rows.length === 0) {
return res.status(401).json({ error: 'Credenciais inválidas' });
}
const user = result.rows[0];
if (!user.is_active) {
return res.status(403).json({ error: 'Usuário inativo' });
}
const validPassword = await bcrypt.compare(password, user.password);
if (!validPassword) {
return res.status(401).json({ error: 'Credenciais inválidas' });
}
const token = jwt.sign(
{ id: user.id, email: user.email, role: user.role, company_id: user.company_id },
process.env.JWT_SECRET,
{ expiresIn: '24h' }
);
res.json({
success: true,
token,
user: {
id: user.id,
email: user.email,
name: user.name,
role: user.role,
company_id: user.company_id
}
});
} catch (error) {
console.error('Erro no login:', error);
res.status(500).json({ error: 'Erro ao fazer login' });
}
});
module.exports = router;