login.js 907 B

123456789101112131415161718192021222324252627282930
  1. const _ = require('lodash')
  2. const config = require('../../../config')
  3. const bcrypt = require('bcrypt')
  4. const JWT = require('jsonwebtoken')
  5. const aguid = require('aguid')
  6. const { User, Session } = require('../../database')
  7. module.exports = {
  8. post: async (request, h) => {
  9. const user = await User.find({where: {email: request.payload.email}})
  10. if (user) {
  11. const success = await bcrypt.compare(request.payload.password, user.password)
  12. if (success) {
  13. const sid = aguid()
  14. const exp = Math.floor(Date.now()/1000) + config.auth.jwtExpires
  15. await Session.create({
  16. id: sid,
  17. startTimestamp: Date.now(),
  18. endTimestamp: exp
  19. })
  20. const token = JWT.sign({sid, exp}, config.auth.jwtSecret);
  21. return {
  22. user: user.sanitize(),
  23. token
  24. }
  25. }
  26. }
  27. return h.response('Login failed').code(401)
  28. }
  29. }