diff options
author | 2020-11-22 13:49:09 +0100 | |
---|---|---|
committer | 2020-11-22 13:49:09 +0100 | |
commit | 4569b85489e863465395f84e995dd3fdc44471b4 (patch) | |
tree | 6e4d27883809c94c8b3f3b87159d85c7f3874bbd /server/middleware | |
parent | 81ddf9b700bc48a1f8e472209f080f9c1d9a9b09 (diff) | |
download | website_creator-4569b85489e863465395f84e995dd3fdc44471b4.tar.gz website_creator-4569b85489e863465395f84e995dd3fdc44471b4.tar.bz2 website_creator-4569b85489e863465395f84e995dd3fdc44471b4.zip |
implement refresh tokens
Diffstat (limited to 'server/middleware')
-rw-r--r-- | server/middleware/auth.js | 30 |
1 files changed, 23 insertions, 7 deletions
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'); } |