Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

login.js 2.2KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. 'use strict'
  2. const Joi = require('joi')
  3. const pluginConfig = {
  4. handlerType: 'user',
  5. docs: {
  6. description: 'login',
  7. notes: 'Attempt login',
  8. },
  9. }
  10. /** Validator functions by request method */
  11. const validators = {
  12. post: {
  13. payload: Joi.object({
  14. user: Joi.object(),
  15. error: Joi.string(),
  16. }),
  17. },
  18. user: Joi.object({
  19. user_id: Joi.number(),
  20. user_name: Joi.string(),
  21. user_email: Joi.string(),
  22. created_at: Joi.date(),
  23. updated_at: Joi.date(),
  24. token: Joi.string(),
  25. }),
  26. }
  27. module.exports = {
  28. method: 'POST',
  29. path: '/login',
  30. options: {
  31. ...pluginConfig.docs,
  32. tags: ['api'],
  33. auth: false,
  34. handler: async function (request, h) {
  35. try {
  36. const { userService, displayService } = request.services()
  37. const res = request.payload
  38. // Callback to use as transaction
  39. const login = async txn => {
  40. return await userService.login(
  41. {
  42. email: res.user.email,
  43. password: res.user.password,
  44. },
  45. txn,
  46. )
  47. }
  48. // Bound context from your plugin server declaration
  49. const user = await h.context.transaction(login)
  50. const token = userService.createToken(user)
  51. return {
  52. ok: true,
  53. handler: pluginConfig.handlerType,
  54. data: displayService.user(user, token),
  55. }
  56. } catch (err) {
  57. console.error(err)
  58. return {
  59. ok: false,
  60. handler: pluginConfig.handlerType,
  61. data: { error: `${err}` },
  62. }
  63. }
  64. },
  65. validate: validators.post,
  66. response: {
  67. schema: Joi.object({
  68. ok: Joi.bool(),
  69. handler: Joi.string(),
  70. data: validators.user,
  71. }),
  72. failAction: 'log',
  73. },
  74. },
  75. }