Added basic Auth-Service features
This commit is contained in:
35
auth/src/middleware/auth.js
Normal file
35
auth/src/middleware/auth.js
Normal file
@@ -0,0 +1,35 @@
|
||||
import { verify } from "../core/jwt";
|
||||
import { query } from "../data/db";
|
||||
import { redis } from '../data/redis';
|
||||
|
||||
const cookieName = process.env.COOKIE_NAME;
|
||||
|
||||
export async function requireUserAuth(req, res, next) {
|
||||
const token = req.cookies?.[cookieName];
|
||||
if (!token) return res.status(401).json({ message: 'No token' });
|
||||
|
||||
let payload;
|
||||
try {
|
||||
payload = await verify(token);
|
||||
} catch (error) {
|
||||
return res.status(401).json({ message: 'Invalid token' });
|
||||
}
|
||||
|
||||
// Session
|
||||
const { rows } = await query(
|
||||
'select id, user_id, expires_at from sessions where id = $1',
|
||||
[payload.sessionId]
|
||||
);
|
||||
if (!rows[0]) return res.status(401).json({ message: 'Invalid session' });
|
||||
|
||||
await query('update sessions set last_activity = now() where id = $1', [payload.sessionId]).catch(() => { });
|
||||
redis.set(`onlineuser:${payload.sub}`, '1', 'EX', 60).catch(() => { });
|
||||
|
||||
req.user = {
|
||||
id: payload.sub,
|
||||
name: payload.sessionId,
|
||||
}
|
||||
next();
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user