From 4569b85489e863465395f84e995dd3fdc44471b4 Mon Sep 17 00:00:00 2001 From: Piotr Russ Date: Sun, 22 Nov 2020 13:49:09 +0100 Subject: implement refresh tokens --- server/middleware/auth.js | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) (limited to 'server/middleware') diff --git a/server/middleware/auth.js b/server/middleware/auth.js index 42d93a4..462b100 100644 --- a/server/middleware/auth.js +++ b/server/middleware/auth.js @@ -9,16 +9,32 @@ const auth = async (req, res, next) => { throw new Error(); } - const decoded = jwt.verify(token, 'replaceThisWithSecretString'); - const user = await User.findOne({ _id: decoded._id, 'tokens.token': token }); + try { + const decoded = jwt.verify(token, 'replaceThisWithSecretString'); + req.userId = decoded._id; + req.refreshToken = decoded.ref; + return next(); + } catch(er) { + if (er.message && er.message === 'jwt expired') { + const { _id, ref } = jwt.decode(token, 'replaceThisWithSecretString'); + const user = await User.findById(_id); + + if (!user) { + throw new Error(); + } + + if (user.sessions.filter(s => s.ref === ref).length > 0) { + req.userId = _id; + req.refreshToken = ref; + req.newToken = await user.generateJwtToken(res.req.refreshToken);; + return next(); + } + + throw new Error(); + } - if (!user) { throw new Error(); } - - req.token = token; - req.user = user; - next(); } catch (err) { res.redirect('/login'); } -- cgit v1.2.3