renew token

This commit is contained in:
Pouria Ezzati 2024-09-12 17:38:00 +03:30
parent 5c76d911f1
commit 6c427ad3b1
No known key found for this signature in database
2 changed files with 14 additions and 5 deletions

View File

@ -1,4 +1,4 @@
const { differenceInMinutes, addMinutes, subMinutes } = require("date-fns");
const { differenceInDays, differenceInMinutes, addMinutes, subMinutes } = require("date-fns");
const passport = require("passport");
const { v4: uuid } = require("uuid");
const bcrypt = require("bcryptjs");
@ -16,7 +16,7 @@ function authenticate(type, error, isStrict, redirect) {
return function auth(req, res, next) {
if (req.user) return next();
passport.authenticate(type, (err, user) => {
passport.authenticate(type, (err, user, info) => {
if (err) return next(err);
if (
@ -50,14 +50,23 @@ function authenticate(type, error, isStrict, redirect) {
if (user && user.banned) {
throw new CustomError("You're banned from using this website.", 403);
}
if (user) {
res.locals.isAdmin = utils.isAdmin(user.email);
req.user = {
...user,
admin: utils.isAdmin(user.email)
};
return next();
// renew token if it's been at least one day since the token has been created
// only do it for html page requests not api requests
if (info?.exp && req.isHTML && redirect === "page") {
const diff = Math.abs(differenceInDays(new Date(info.exp * 1000), new Date()));
if (diff < 6) {
const token = utils.signToken(user);
utils.deleteCurrentToken(res);
utils.setToken(res, token);
}
}
}
return next();
})(req, res, next);

View File

@ -17,7 +17,7 @@ passport.use(
try {
const user = await query.user.find({ email: payload.sub });
if (!user) return done(null, false);
return done(null, user);
return done(null, user, payload);
} catch (err) {
return done(err);
}