Skip to content

Commit

Permalink
feat: set currentUser with every request (foyzulkarim#35)
Browse files Browse the repository at this point in the history
  • Loading branch information
aninda052 committed Aug 30, 2023
1 parent de04a1e commit a3f147d
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 14 deletions.
23 changes: 23 additions & 0 deletions server/src/middleware/auth.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
const jwt = require("jsonwebtoken");
const { User } = require('../modules/db/collections');

const setCurrentUser = async (req, res, next) => {
const token = req.headers.authorization ?? '';
req.user = null;

if (token) {
await jwt.verify(token.split(' ')[1], process.env.JWT_SECRET, async function(err, payLOad){
if(payLOad){
req.user = await User.getObjectById(payLOad._id);
}
});

}
next();
};


module.exports = {
setCurrentUser
}

18 changes: 7 additions & 11 deletions server/src/modules/authentication/controller.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
const { loginValidate, authenticate } = require('./request');
const { generateJwtToken } = require('./utils')
const { setCookie } = require('../../utils/cookie')
const { generateJwtToken } = require('./utils');
const { setCookie } = require('../../utils/cookie');

const setupRoutes = (app) => {

Expand All @@ -9,8 +9,8 @@ const setupRoutes = (app) => {
const loginValidationResult = loginValidate(req.body);

if (!loginValidationResult.error) {
const { email, password } = req.body
const authenticationResult = await authenticate(email, password)
const { email, password } = req.body;
const authenticationResult = await authenticate(email, password);

if(authenticationResult.isAuthenticate){

Expand All @@ -19,14 +19,10 @@ const setupRoutes = (app) => {
name: authenticationResult.user.name
});

setCookie(res, 'Bearer', jwtToken, {
httpOnly: true,
secure: process.env.NODE_ENV !== 'development', // Use secure cookies in production
sameSite: 'strict', // Prevent CSRF attacks
maxAge: 2 * 24 * 60 * 60 * 1000, // 2 days
return res.status(200).json({
user: authenticationResult.user,
accessToken: jwtToken
});

return res.status(200).json({user: authenticationResult.user });
}
else{
return res.status(401).json({message: authenticationResult.message });
Expand Down
2 changes: 1 addition & 1 deletion server/src/modules/models/user/controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ const BASE_URL = `/api/user`;
const setupRoutes = (app) => {


app.post(`${BASE_URL}/registration`, async (req, res) => {
app.post(`/api/registration`, async (req, res) => {

const validationResult = validate(req.body);

Expand Down
6 changes: 4 additions & 2 deletions server/src/server.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@ const eventEmitter = require('./event-manager').getInstance();
const PORT = 4000;

const setup = async () => {
const { setup: setupVideoModule } =
await require('./modules/models/video/controller');
const { setCurrentUser } = await require('./middleware/auth');
app.use(setCurrentUser);

const { setup: setupVideoModule } = await require('./modules/models/video/controller');
setupVideoModule(app);

const { setup: setupRoleModule } = await require('./modules/models/role/controller');
Expand Down

0 comments on commit a3f147d

Please sign in to comment.