- Added `jose` library for JWT token generation and verification. - Implemented login functionality with token storage using cookies. - Created `HeaderAdmin` component for admin panel with login/logout capabilities. - Developed `LoginForm` component for user authentication. - Added `Table` component to display data with caching from localStorage. - Introduced `SubHeaderAdmin` for additional admin actions. - Enhanced `database.js` with functions for admin login and fetching table data. - Updated `server.js` to handle new routes for login and table data retrieval. - Modified `package.json` and `package-lock.json` to include new dependencies.
27 lines
784 B
JavaScript
27 lines
784 B
JavaScript
import { SignJWT, jwtVerify } from "jose";
|
|
import env from "dotenv";
|
|
env.config();
|
|
const secret = new TextEncoder().encode(process.env.SECRET_KEY);
|
|
|
|
export async function generateToken(payload) {
|
|
const newToken = await new SignJWT(payload)
|
|
.setProtectedHeader({ alg: "HS256" })
|
|
.setIssuedAt()
|
|
.setExpirationTime("2h") // Token valid for 2 hours
|
|
.sign(secret);
|
|
console.log("Generated token: ", newToken);
|
|
return newToken;
|
|
}
|
|
|
|
export async function authenticate(req, res, next) {
|
|
const authHeader = req.headers["authorization"];
|
|
const token = authHeader && authHeader.split(" ")[1]; // Bearer <token>
|
|
|
|
if (token == null) return res.sendStatus(401); // No token present
|
|
|
|
const { payload } = await jwtVerify(token, secret);
|
|
req.user = payload;
|
|
|
|
next();
|
|
}
|