send-sms-code.js 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. const {
  2. sendSmsCode
  3. } = require('../../lib/utils/sms')
  4. const {
  5. verifyCaptcha
  6. } = require('../../lib/utils/captcha')
  7. const {
  8. SMS_SCENE
  9. } = require('../../common/constants')
  10. const {
  11. ERROR
  12. } = require('../../common/error')
  13. /**
  14. * 发送短信验证码
  15. * @tutorial https://uniapp.dcloud.net.cn/uniCloud/uni-id-pages.html#send-sms-code
  16. * @param {Object} params
  17. * @param {String} params.mobile 手机号
  18. * @param {String} params.captcha 图形验证码
  19. * @param {String} params.scene 短信验证码使用场景
  20. * @returns
  21. */
  22. module.exports = async function (params = {}) {
  23. const schema = {
  24. mobile: 'mobile',
  25. captcha: 'string',
  26. scene: 'string'
  27. }
  28. this.middleware.validate(params, schema)
  29. const {
  30. mobile,
  31. captcha,
  32. scene
  33. } = params
  34. if (!(Object.values(SMS_SCENE).includes(scene))) {
  35. throw {
  36. errCode: ERROR.INVALID_PARAM
  37. }
  38. }
  39. await verifyCaptcha.call(this, {
  40. scene: 'send-sms-code',
  41. captcha
  42. })
  43. // -- 测试代码
  44. const {
  45. templateId
  46. } = (this.config.service &&
  47. this.config.service.sms &&
  48. this.config.service.sms.scene &&
  49. this.config.service.sms.scene[scene]) || {}
  50. if (!templateId) {
  51. require('../../lib/utils/verify-code')
  52. .setMobileVerifyCode.call(this, {
  53. mobile: params.mobile,
  54. code: '123456',
  55. expiresIn: 180,
  56. scene
  57. })
  58. return {
  59. errCode: 'uni-id-invalid-sms-template-id',
  60. errMsg: `未找到scene=${scene},的短信模版templateId。\n已启动测试模式,直接使用:123456作为短信验证码即可。\n如果是正式项目,请在路径:/common/uni-config-center/uni-id/config.json中service->sms中配置密钥等信息\n更多详情:https://uniapp.dcloud.io/uniCloud/uni-id.html#config`
  61. }
  62. }
  63. // -- 测试代码
  64. return sendSmsCode.call(this, {
  65. mobile,
  66. scene
  67. })
  68. }