register-user-by-email.js 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. const {
  2. postRegister,
  3. preRegisterWithPassword
  4. } = require('../../lib/utils/register')
  5. const {
  6. verifyCaptcha
  7. } = require('../../lib/utils/captcha')
  8. const {
  9. CAPTCHA_SCENE,
  10. EMAIL_SCENE,
  11. LOG_TYPE
  12. } = require('../../common/constants')
  13. const {
  14. verifyEmailCode
  15. } = require('../../lib/utils/verify-code')
  16. /**
  17. * 通过邮箱+验证码注册普通用户
  18. * @tutorial https://uniapp.dcloud.net.cn/uniCloud/uni-id-pages.html#register-user-by-email
  19. * @param {Object} params
  20. * @param {String} params.email 邮箱
  21. * @param {String} params.password 密码
  22. * @param {String} params.nickname 昵称
  23. * @param {String} params.code 邮箱验证码
  24. * @param {String} params.inviteCode 邀请码
  25. * @returns
  26. */
  27. module.exports = async function (params = {}) {
  28. const schema = {
  29. email: 'email',
  30. password: 'password',
  31. nickname: {
  32. required: false,
  33. type: 'nickname'
  34. },
  35. code: 'string',
  36. inviteCode: {
  37. required: false,
  38. type: 'string'
  39. }
  40. }
  41. this.middleware.validate(params, schema)
  42. const {
  43. email,
  44. password,
  45. nickname,
  46. code,
  47. inviteCode
  48. } = params
  49. try {
  50. // 验证邮箱验证码,验证不通过时写入失败日志
  51. await verifyEmailCode({
  52. email,
  53. code,
  54. scene: EMAIL_SCENE.REGISTER
  55. })
  56. } catch (error) {
  57. await this.middleware.uniIdLog({
  58. data: {
  59. email
  60. },
  61. type: LOG_TYPE.REGISTER,
  62. success: false
  63. })
  64. throw error
  65. }
  66. const {
  67. user,
  68. extraData
  69. } = await preRegisterWithPassword.call(this, {
  70. user: {
  71. email
  72. },
  73. password
  74. })
  75. return postRegister.call(this, {
  76. user,
  77. extraData: {
  78. ...extraData,
  79. nickname,
  80. email_confirmed: 1
  81. },
  82. inviteCode
  83. })
  84. }