Advertisement
Guest User

Untitled

a guest
Jun 16th, 2019
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.44 KB | None | 0 0
  1. const JWTAuthMiddleware = async function (request, reply) {
  2. const startedAt = Date.now();
  3.  
  4. const authHeader = request.headers['authorization'];
  5.  
  6. // HEADER NOT PROVIDED
  7. if (!authHeader)
  8. return notAuthorized(reply);
  9.  
  10. // let's assume it is always `Bearer token`
  11. const [ protocol, token ] = authHeader.split(' ');
  12.  
  13. // TOKEN NOT PROVIDED
  14. if (!token)
  15. return notAuthorized(reply);
  16.  
  17. try {
  18. // VERIFY TOKEN
  19. const decoded = this.jwt.verify(token);
  20.  
  21. const Users = this.mongo.db.collection('users');
  22. const { email, iat } = decoded;
  23.  
  24. try {
  25. const user = await Users.findOne({ email }, profileProjection);
  26.  
  27. // CHECK FOR USER EXISTENCE
  28. if (!user)
  29. return notAuthorized(reply);
  30.  
  31. // CHECK FOR BLACKLISTED TOKEN
  32. if (!!user.tokenMinValidity && (iat * 1000) < user.tokenMinValidity)
  33. return notAuthorized(reply);
  34.  
  35. // ALL FINE, FORWARD USER PROFILE
  36. request.user = user;
  37.  
  38. request.authTime = Date.now() - startedAt;
  39.  
  40. return;
  41. } catch (error) {
  42. console.error(error);
  43. reply.code(500);
  44. reply.send({ code: errorTypes.INTERNAL_SERVER_ERROR });
  45. return;
  46. }
  47.  
  48. } catch (error) {
  49. // TOKEN MALFORMED OR EXPIRED
  50. console.error(error);
  51. return notAuthorized(reply);
  52. }
  53. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement