Skip to content
Snippets Groups Projects
Commit 5307b1d5 authored by HENRIQUES Valentin's avatar HENRIQUES Valentin
Browse files

Mise en place déconnection

parent d337e548
No related branches found
No related tags found
No related merge requests found
No preview for this file type
...@@ -24,7 +24,7 @@ import bcrypt from 'bcrypt'; ...@@ -24,7 +24,7 @@ import bcrypt from 'bcrypt';
import authSignup from './src/routes/auth/authSignup.js'; import authSignup from './src/routes/auth/authSignup.js';
import authLogin from './src/routes/auth/authLogin.js'; import authLogin from './src/routes/auth/authLogin.js';
import authMiddleware from './src/routes/auth/authMiddleware.js'; import authMiddleware from './src/routes/auth/authMiddleware.js';
import authDisconnect from './src/routes/auth/authDisconnect.js';
async function createDb() { async function createDb() {
if(fs.existsSync('./db/database.db') == false){ if(fs.existsSync('./db/database.db') == false){
const db = await open({ const db = await open({
...@@ -65,6 +65,7 @@ api.use(express.json()); ...@@ -65,6 +65,7 @@ api.use(express.json());
api.use('/auth/signup',authSignup); api.use('/auth/signup',authSignup);
api.use('/auth/login',authLogin); api.use('/auth/login',authLogin);
api.use('/auth/disconnect', authDisconnect);
api.use('/hello',authMiddleware,helloRoute); api.use('/hello',authMiddleware,helloRoute);
api.use('/monkey/deleteAll',monkeyDeletteAll); api.use('/monkey/deleteAll',monkeyDeletteAll);
......
...@@ -27,6 +27,10 @@ CREATE TABLE user ( ...@@ -27,6 +27,10 @@ CREATE TABLE user (
password VARCHAR(50) NOT NULL password VARCHAR(50) NOT NULL
); );
CREATE TABLE invalid_token (
token TEXT
);
-- Insertion des données dans la table 'user' -- Insertion des données dans la table 'user'
INSERT INTO user (id, username, password) VALUES INSERT INTO user (id, username, password) VALUES
(1, 'admin', 'admin'); (1, 'admin', 'admin');
......
import express from 'express';
import bcrypt from 'bcrypt';
import jwt from 'jsonwebtoken';
import sqlite from 'better-sqlite3';
import dotenv from 'dotenv';
dotenv.config();
const router = express.Router();
export let blacklistedTokens = [];
router.post('/', (req, res) => {
const db = new sqlite('./db/database.db');
const token = req.header('x-auth-token');
if (!token) {
return res.status(401).json({ msg: 'Aucun token, autorisation refusée' });
}
db.prepare('INSERT INTO invalid_token (token) VALUES (?)').run(token);
res.json({ msg: 'Déconnecté avec succès' });
});
export default router;
\ No newline at end of file
...@@ -11,22 +11,18 @@ router.post('/', async (req, res) => { ...@@ -11,22 +11,18 @@ router.post('/', async (req, res) => {
try { try {
const { username, password } = req.body; const { username, password } = req.body;
// Ouvrez la base de données
const db = new sqlite('./db/database.db'); const db = new sqlite('./db/database.db');
// Vérifiez si l'utilisateur existe
let user = db.prepare('SELECT * FROM user WHERE username = ?').get(username); let user = db.prepare('SELECT * FROM user WHERE username = ?').get(username);
if (!user) { if (!user) {
return res.status(400).json({ msg: 'Cet utilisateur n\'existe pas' }); return res.status(400).json({ msg: 'Cet utilisateur n\'existe pas' });
} }
// Vérifiez le mot de passe
const isMatch = await bcrypt.compare(password, user.password); const isMatch = await bcrypt.compare(password, user.password);
if (!isMatch) { if (!isMatch) {
return res.status(400).json({ msg: 'Mot de passe incorrect' }); return res.status(400).json({ msg: 'Mot de passe incorrect' });
} }
// Créez et renvoyez un token JWT
const payload = { const payload = {
user: { user: {
id: user.id id: user.id
...@@ -35,7 +31,7 @@ router.post('/', async (req, res) => { ...@@ -35,7 +31,7 @@ router.post('/', async (req, res) => {
jwt.sign( jwt.sign(
payload, payload,
process.env.JWT_SECRET, // Assurez-vous d'avoir défini cette variable d'environnement process.env.JWT_SECRET,
{ expiresIn: 3600 }, { expiresIn: 3600 },
(err, token) => { (err, token) => {
if (err) throw err; if (err) throw err;
......
import jwt from 'jsonwebtoken'; import jwt from 'jsonwebtoken';
import sqlite from 'better-sqlite3'; import sqlite from 'better-sqlite3';
const authMiddleware = (req, res, next) => { const authMiddleware = (req, res, next) => {
// Récupérez le token du header de la requête
const token = req.header('x-auth-token'); const token = req.header('x-auth-token');
const db = new sqlite('./db/database.db');
// Vérifiez si le token n'existe pas
if (!token) { if (!token) {
return res.status(401).json({ msg: 'Aucun token, autorisation refusée' }); return res.status(401).json({ msg: 'Aucun token, autorisation refusée' });
} }
let tokenExists = db.prepare('SELECT token FROM invalid_token WHERE token = ?').get(token);
// Vérifiez le token if (tokenExists) {
return res.status(401).json({ msg: 'Token sur la liste noire, veuillez vous reconnecter' });
}
try { try {
const decoded = jwt.verify(token, process.env.JWT_SECRET); const decoded = jwt.verify(token, process.env.JWT_SECRET);
// Ouvrez la base de données
const db = new sqlite('./db/database.db');
// Vérifiez si l'utilisateur existe
let user = db.prepare('SELECT * FROM user WHERE id = ?').get(decoded.user.id); let user = db.prepare('SELECT * FROM user WHERE id = ?').get(decoded.user.id);
if (!user) { if (!user) {
return res.status(401).json({ msg: 'Token non valide' }); return res.status(401).json({ msg: 'Token non valide' });
......
...@@ -11,26 +11,20 @@ router.post('/', async (req, res) => { ...@@ -11,26 +11,20 @@ router.post('/', async (req, res) => {
try { try {
const { username, password } = req.body; const { username, password } = req.body;
// Ouvrez la base de données
const db = new sqlite('./db/database.db'); const db = new sqlite('./db/database.db');
// Vérifiez si l'utilisateur existe déjà
let user = db.prepare('SELECT * FROM user WHERE username = ?').get(username); let user = db.prepare('SELECT * FROM user WHERE username = ?').get(username);
if (user) { if (user) {
return res.status(400).json({ msg: 'Cet utilisateur existe déjà' }); return res.status(400).json({ msg: 'Cet utilisateur existe déjà' });
} }
// Hachez le mot de passe
const salt = await bcrypt.genSalt(10); const salt = await bcrypt.genSalt(10);
const hashedPassword = await bcrypt.hash(password, salt); const hashedPassword = await bcrypt.hash(password, salt);
// Créez un nouvel utilisateur
db.prepare('INSERT INTO user (username, password) VALUES (?, ?)').run(username, hashedPassword); db.prepare('INSERT INTO user (username, password) VALUES (?, ?)').run(username, hashedPassword);
// Récupérez l'utilisateur de la base de données
user = db.prepare('SELECT * FROM user WHERE username = ?').get(username); user = db.prepare('SELECT * FROM user WHERE username = ?').get(username);
// Créez et renvoyez un token JWT
const payload = { const payload = {
user: { user: {
id: user.id id: user.id
...@@ -39,7 +33,7 @@ router.post('/', async (req, res) => { ...@@ -39,7 +33,7 @@ router.post('/', async (req, res) => {
jwt.sign( jwt.sign(
payload, payload,
process.env.JWT_SECRET, // Assurez-vous d'avoir défini cette variable d'environnement process.env.JWT_SECRET,
{ expiresIn: 3600 }, { expiresIn: 3600 },
(err, token) => { (err, token) => {
if (err) throw err; if (err) throw err;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment