Guest User

Untitled

a guest
Jan 8th, 2018
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.00 KB | None | 0 0
  1. const jwt = require('jsonwebtoken')
  2. const pick = require('lodash/fp/pick')
  3.  
  4. const secret = 'jwt-secret'
  5. const mock = {
  6. user: 'vu',
  7. password: '123123'
  8. }
  9.  
  10. module.exports = (req, res) => {
  11. /*
  12. Strategy:
  13. - Check if localStorage has a token
  14. - If not, show #LoginForm
  15. - if found, show #Continue button
  16.  
  17. #LoginForm:
  18. - User submit with user/pwd
  19. - Provide a Token for user at his request
  20. - Upon success, display to #Continue button'
  21.  
  22. #Continue:
  23. - Ask user to click on Continue/Proceed to go to Test home-screen
  24. - On click, validate again in case Browser has been closed and re-opened
  25. (this is where user can pick up the test where he left off)
  26. - Validate token, if valid, go to Home-screen
  27. - if not valid, go back to LoginForm, require Login again to get new Token
  28. */
  29.  
  30. const payload = req.body
  31. const authUser = payload.user === mock.user && payload.password === mock.password
  32. let token = req.get('Access-Token')
  33.  
  34. const newTokenMsg = 'You have received a temporary Token which expires in 60s.'
  35. const invalidTokenMsg = 'This Token is either invalid or already expired, please login to get a new one!'
  36. const validTokenMsg = 'Access granted'
  37. const invalidUserPwdMsg = 'Invalid Credentials'
  38.  
  39. let json = {}
  40. let status = 200
  41.  
  42. /*
  43. Authentication Piority:
  44. 1 Username/Password
  45. 2 Token
  46. */
  47.  
  48. if (authUser) {
  49. token = jwt.sign({
  50. data: req.body,
  51. exp: Math.floor(Date.now() / 1000) + (60 * 30)
  52. }, secret)
  53. status = 201
  54. json = { error: false, message: newTokenMsg, response: { token, user: req.body.user } }
  55. return res.status(status).json(json)
  56. }
  57.  
  58. if (token.length === 0) {
  59. status = 401
  60. json = { error: true, message: invalidUserPwdMsg, response: null }
  61. return res.status(status).json(json)
  62. }
  63.  
  64. return jwt.verify(token, secret, (err, decoded) => res.status(err ? 401 : 202).json({
  65. error: !!err,
  66. message: err ? invalidTokenMsg : validTokenMsg,
  67. response: err ? null : pick(['exp', 'iat'], decoded)
  68. }))
  69. }
Add Comment
Please, Sign In to add comment