Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

login.js 1.9KB

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