fixing auth apply foreach route

This commit is contained in:
Kfir Dayan 2023-06-08 20:08:15 +03:00
parent e1c47fed89
commit 92b65e02d0
6 changed files with 28 additions and 13 deletions

View file

@ -6,11 +6,7 @@ import { User, IUser } from '../models/User';
export async function createUser(req: Request, res: Response) { export async function createUser(req: Request, res: Response) {
try { try {
const { firstName, lastName, email, password, address } = req.body; const { firstName, lastName, email, password, address } = req.body;
// Hash the password
const hashedPassword = await bcrypt.hash(password, 10); const hashedPassword = await bcrypt.hash(password, 10);
// Create the user in the database
const user: IUser = await User.create({ const user: IUser = await User.create({
firstName, firstName,
lastName, lastName,

View file

@ -1,7 +1,10 @@
import express from 'express'; import express from 'express';
import mongoose from 'mongoose'; import mongoose from 'mongoose';
import userRouter from './routes/user';
import ProductrRouter from './routes/product';
import { authenticateToken } from './middlewares/authMiddleware'; import { authenticateToken } from './middlewares/authMiddleware';
import userRoutes from './routes/user';
const env = require('dotenv').config().parsed; const env = require('dotenv').config().parsed;
@ -11,6 +14,7 @@ const PORT = 3000;
app.use(express.json()); app.use(express.json());
app.use(authenticateToken); app.use(authenticateToken);
// Connect to MongoDB using Mongoose // Connect to MongoDB using Mongoose
mongoose.connect(env.DATABASE_URL); mongoose.connect(env.DATABASE_URL);
@ -23,7 +27,8 @@ db.once('open', () => {
}); });
// Routes // Routes
app.use('/users', userRoutes); app.use('/users', userRouter);
app.use('/products', ProductrRouter);
// Start server // Start server
app.listen(PORT, () => { app.listen(PORT, () => {

View file

@ -5,18 +5,22 @@ interface AuthenticatedRequest extends Request {
user?: JwtPayload | string; user?: JwtPayload | string;
} }
const exceptionRoutes: string[] = ['/login', '/']; const exceptionRoutes: string[] = ['/users/login', '/users'];
// Middleware function to authenticate requests // Middleware function to authenticate requests
export function authenticateToken(req: AuthenticatedRequest, res: Response, next: NextFunction) { export function authenticateToken(req: AuthenticatedRequest, res: Response, next: NextFunction) {
const authHeader = req.headers['authorization']; const authHeader = req.headers['authorization'];
const token = authHeader && authHeader.split(' ')[1]; const token = authHeader && authHeader.split(' ')[1];
if (!token && exceptionRoutes.includes(req.originalUrl)) { if(token) {
console.log('token', token);
}
if (!token && exceptionRoutes.includes(req.route)) {
return res.sendStatus(401); // Unauthorized return res.sendStatus(401); // Unauthorized
} }
if (!exceptionRoutes.includes(req.originalUrl)) { if (!exceptionRoutes.includes(req.route)) {
// Skip authentication for exception routes // Skip authentication for exception routes
return next(); return next();
} }

View file

@ -14,6 +14,7 @@ export interface IProduct extends Document {
name: string; name: string;
description: string; description: string;
price: number; price: number;
userId: string;
createdAt: Date; createdAt: Date;
updatedAt: Date; updatedAt: Date;
} }

9
src/routes/product.ts Normal file
View file

@ -0,0 +1,9 @@
import express from 'express';
const ProductrRouter = express.Router();
ProductrRouter.post('/', (req, res) => {
res.send('Create product');
})
export default ProductrRouter;

View file

@ -1,9 +1,9 @@
import express from 'express'; import express from 'express';
import { createUser, login } from '../controllers/UserController'; import { createUser, login } from '../controllers/UserController';
const router = express.Router(); const userRouter = express.Router();
router.post('/', createUser); userRouter.post('/', createUser);
router.post('/login', login) userRouter.post('/login', login);
export default router; export default userRouter;