implemented JWT
This commit is contained in:
38
index.js
38
index.js
@@ -2,23 +2,24 @@ const express = require('express');
|
|||||||
const session = require('express-session');
|
const session = require('express-session');
|
||||||
const port = 3000;
|
const port = 3000;
|
||||||
const app = express();
|
const app = express();
|
||||||
|
const cookieParser = require('cookie-parser');
|
||||||
|
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
const { insertUser, isUserExists, client } = require('./backend/db.js');
|
const { insertUser, isUserExists, client } = require('./backend/db.js');
|
||||||
|
|
||||||
const bcrypt = require('bcrypt');
|
const bcrypt = require('bcrypt');
|
||||||
const saltRounds = 10;
|
const saltRounds = 10;
|
||||||
|
|
||||||
const { Server } = require('socket.io');
|
const { Server } = require('socket.io');
|
||||||
const { createServer } = require('node:http');
|
const { createServer } = require('node:http');
|
||||||
const server = createServer(app);
|
const server = createServer(app);
|
||||||
const io = new Server(server);
|
const io = new Server(server);
|
||||||
|
|
||||||
const jwt = require('jsonwebtoken');
|
const jwt = require('jsonwebtoken');
|
||||||
|
const {decode} = require("jsonwebtoken");
|
||||||
const jwtSecret = process.env.JWT_SECRET;
|
const jwtSecret = process.env.JWT_SECRET;
|
||||||
|
|
||||||
require('dotenv').config();
|
require('dotenv').config();
|
||||||
|
app.use(cookieParser());
|
||||||
app.use(express.json());
|
app.use(express.json());
|
||||||
app.use(express.urlencoded({ extended: true }));
|
app.use(express.urlencoded({ extended: true }));
|
||||||
app.use(express.static(path.join(__dirname, 'public')));
|
app.use(express.static(path.join(__dirname, 'public')));
|
||||||
@@ -46,27 +47,46 @@ app.post('/auth/signup', async (req, res) => {
|
|||||||
|
|
||||||
// serving the login page
|
// serving the login page
|
||||||
app.get('/login', (req, res) => {
|
app.get('/login', (req, res) => {
|
||||||
|
const token = req.cookies.token;
|
||||||
|
if (token) {
|
||||||
|
res.json({ Error: 'Already logged in' });
|
||||||
|
} else {
|
||||||
res.sendFile(path.join(__dirname, '/frontend/routes/login.html'));
|
res.sendFile(path.join(__dirname, '/frontend/routes/login.html'));
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// serving the signup page
|
// serving the signup page
|
||||||
app.get('/signup', (req, res) => {
|
app.get('/signup', (req, res) => {
|
||||||
|
const token = req.cookies.token;
|
||||||
|
if(token){
|
||||||
|
res.json({Error: 'Already logged in'});
|
||||||
|
} else
|
||||||
res.sendFile(path.join(__dirname, '/frontend/routes/signup.html'));
|
res.sendFile(path.join(__dirname, '/frontend/routes/signup.html'));
|
||||||
});
|
});
|
||||||
|
|
||||||
app.get('/auth/user', (req, res) => {
|
app.get('/auth/user', (req, res) => {
|
||||||
if (req.session.loggedin) {
|
const token = req.cookies.token;
|
||||||
res.json({ username: req.session.username });
|
if(token) {
|
||||||
|
jwt.verify(token, jwtSecret, (err, user) => {
|
||||||
|
if(err) {
|
||||||
|
return res.status(403).send('Unauthorized');
|
||||||
} else {
|
} else {
|
||||||
res.status(401).json({ message: 'Unauthorized' });
|
const username = user.username;
|
||||||
|
res.json({username});
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// serving the chat page if logged in
|
// serving the chat page if logged in
|
||||||
app.get('/', (req, res) => {
|
app.get('/', (req, res) => {
|
||||||
const username = req.session.username;
|
const token = req.cookies.token;
|
||||||
|
if (token) {
|
||||||
if (req.session.loggedin) {
|
jwt.verify(token, jwtSecret, (err, user) => {
|
||||||
|
if (err) {
|
||||||
|
return res.status(403).send('Unauthorized');
|
||||||
|
} else {
|
||||||
|
const username = user.username;
|
||||||
res.sendFile(path.join(__dirname, '/frontend/routes/chat.html'));
|
res.sendFile(path.join(__dirname, '/frontend/routes/chat.html'));
|
||||||
// socket io connection
|
// socket io connection
|
||||||
io.on('connection', (socket) => {
|
io.on('connection', (socket) => {
|
||||||
@@ -85,6 +105,8 @@ app.get('/', (req, res) => {
|
|||||||
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
res.redirect('/login');
|
res.redirect('/login');
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
"private": true,
|
"private": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"bcrypt": "^5.1.1",
|
"bcrypt": "^5.1.1",
|
||||||
|
"cookie-parser": "^1.4.6",
|
||||||
"dotenv": "^16.4.5",
|
"dotenv": "^16.4.5",
|
||||||
"express": "^4.19.2",
|
"express": "^4.19.2",
|
||||||
"express-session": "^1.18.0",
|
"express-session": "^1.18.0",
|
||||||
|
|||||||
Reference in New Issue
Block a user