Skip to content

Commit 2917b38

Browse files
committed
ft : auth
1 parent 2793ee1 commit 2917b38

File tree

3 files changed

+53
-0
lines changed

3 files changed

+53
-0
lines changed

auth/jwt.strategy.js

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
const passport = require('passport');
2+
const User = require('../users/user.model');
3+
const { Strategy, ExtractJwt } = require('passport-jwt');
4+
5+
passport.use(new Strategy(
6+
{
7+
jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(), // extract token from Authorization header as a Bearer token
8+
secretOrKey: process.env.JWT_SECRET // jwt secret extracted from .env
9+
},
10+
function(token, done) {
11+
User.findOne({_id: token.sub}, function(err, user) {
12+
if (err) return done(err, false); // error
13+
if (user) return done(null, {
14+
_id:user?._id,
15+
role:user?.role
16+
}); // user found
17+
return done(null, false); // user not found
18+
});
19+
}
20+
)
21+
);
22+
module.exports = passport;

auth/local.strategy.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
const passport = require('passport');
2+
const { Strategy } = require('passport-local');
3+
const User = require('../users/user.model');
4+
const usersService = require('../users/user.service');
5+
6+
passport.use(new Strategy(
7+
function (username, password, done) {
8+
User.findOne({ username }, async function (err, user) {
9+
if (err) return done(err)
10+
if (!user) {
11+
console.log("[-] User not found");
12+
return done(null, false);
13+
}
14+
if (!await usersService.verify(username, password)){
15+
console.log("[-] Wrong password...");
16+
return done(null, false);
17+
}
18+
return done(null, user);
19+
});
20+
}
21+
));
22+
23+
module.exports = passport

middleware/auth.middleware.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
const roleMiddleware = (allowedRoles = []) => (req, res, next) => {
2+
if (!allowedRoles || allowedRoles === []) return;
3+
if (!req.user?.role) return res.status(401).send(); // No user
4+
if (!allowedRoles.includes(req.user.role)) return res.status(403).send(); // No role
5+
next();
6+
}
7+
8+
module.exports = roleMiddleware;

0 commit comments

Comments
 (0)