46 lines
1.1 KiB
JavaScript
46 lines
1.1 KiB
JavaScript
const express = require('express');
|
|
const bcrypt = require('bcrypt');
|
|
const fs = require('fs');
|
|
const router = express.Router();
|
|
|
|
const { createToken, addToDenylist } = require('../utils/jwtHelpers');
|
|
|
|
// carica utenti
|
|
const userdb = JSON.parse(fs.readFileSync('./api_v1/users.json', 'utf-8'));
|
|
|
|
// LOGIN
|
|
router.post('/login', async (req, res) => {
|
|
const { email, password } = req.body;
|
|
|
|
const user = userdb.users.find((u) => u.email === email);
|
|
if (!user) {
|
|
return res.status(401).json({ message: 'Incorrect email or password' });
|
|
}
|
|
|
|
const ok = await bcrypt.compare(password, user.password);
|
|
if (!ok) {
|
|
return res.status(401).json({ message: 'Incorrect email or password' });
|
|
}
|
|
|
|
const token = createToken({
|
|
id: user.id,
|
|
email: user.email,
|
|
name: user.name,
|
|
});
|
|
|
|
res.json({ token, name: user.name });
|
|
});
|
|
|
|
// LOGOUT
|
|
router.post('/logout', (req, res) => {
|
|
const auth = req.headers.authorization || '';
|
|
const [scheme, token] = auth.split(' ');
|
|
|
|
if (scheme === 'Bearer' && token) {
|
|
addToDenylist(token);
|
|
}
|
|
|
|
res.status(204).end();
|
|
});
|
|
|
|
module.exports = router;
|