added JWT
This commit is contained in:
54
index.js
54
index.js
@@ -14,6 +14,9 @@ const { createServer } = require('node:http');
|
||||
const server = createServer(app);
|
||||
const io = new Server(server);
|
||||
|
||||
const jwt = require('jsonwebtoken');
|
||||
const jwtSecret = process.env.JWT_SECRET;
|
||||
|
||||
require('dotenv').config();
|
||||
|
||||
app.use(express.json());
|
||||
@@ -27,7 +30,7 @@ app.use(session({
|
||||
saveUninitialized: true,
|
||||
cookie: {
|
||||
secure: false,
|
||||
maxAge: 168 * 60 * 60 * 1000
|
||||
maxAge: 30 * 24 * 60 * 60 * 1000 //30 days
|
||||
}
|
||||
}));
|
||||
|
||||
@@ -51,32 +54,43 @@ app.get('/signup', (req, res) => {
|
||||
res.sendFile(path.join(__dirname, '/frontend/routes/signup.html'));
|
||||
});
|
||||
|
||||
app.get('/auth/user', (req, res) => {
|
||||
if (req.session.loggedin) {
|
||||
res.json({ username: req.session.username });
|
||||
} else {
|
||||
res.status(401).json({ message: 'Unauthorized' });
|
||||
}
|
||||
});
|
||||
|
||||
// serving the chat page if logged in
|
||||
app.get('/', (req, res) => {
|
||||
const username = req.session.username;
|
||||
|
||||
if (req.session.loggedin) {
|
||||
res.sendFile(path.join(__dirname, '/frontend/routes/chat.html'));
|
||||
// socket io connection
|
||||
io.on('connection', (socket) => {
|
||||
console.log(username + ' connected');
|
||||
|
||||
// disconnect event
|
||||
socket.on('disconnect', () => {
|
||||
console.log(username + 'have disconnected');
|
||||
});
|
||||
|
||||
// chat message event
|
||||
socket.on('chat message', (msg) => {
|
||||
const message = username + ': ' + msg;
|
||||
console.log(message);
|
||||
io.emit('chat message', message);
|
||||
|
||||
});
|
||||
});
|
||||
|
||||
} else {
|
||||
res.redirect('/login');
|
||||
}
|
||||
});
|
||||
|
||||
// socket io connection
|
||||
io.on('connection', (socket) => {
|
||||
console.log('a user connected');
|
||||
|
||||
// disconnect event
|
||||
socket.on('disconnect', () => {
|
||||
console.log('user disconnected');
|
||||
});
|
||||
|
||||
// chat message event
|
||||
socket.on('chat message', (data) => {
|
||||
const { username, message } = data;
|
||||
console.log(username + "sended: " + message);
|
||||
io.emit(username + "sended: " + message);
|
||||
|
||||
});
|
||||
});
|
||||
// run server
|
||||
server.listen(port, () => {
|
||||
console.log(`Chat app listening on port ${port}`);
|
||||
@@ -121,6 +135,10 @@ async function loginUser(req, res) {
|
||||
// Compare password
|
||||
const match = await bcrypt.compare(password, result.rows[0].password);
|
||||
if (match) {
|
||||
const token = jwt.sign({ username }, jwtSecret, {
|
||||
expiresIn: '30d' // token expires in 30 days
|
||||
});
|
||||
res.cookie('token', token, {httpOnly: true});
|
||||
req.session.loggedin = true;
|
||||
req.session.username = username;
|
||||
res.send(`
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
"dotenv": "^16.4.5",
|
||||
"express": "^4.19.2",
|
||||
"express-session": "^1.18.0",
|
||||
"jsonwebtoken": "^9.0.2",
|
||||
"pg": "^8.12.0",
|
||||
"socket.io": "^4.7.5"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user