You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
|
|
const {
|
|
|
|
|
setMobileVerifyCode
|
|
|
|
|
} = require('./verify-code')
|
|
|
|
|
const {
|
|
|
|
|
getVerifyCode
|
|
|
|
|
} = require('../../common/utils')
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 发送短信
|
|
|
|
|
* @param {object} param
|
|
|
|
|
* @param {string} param.mobile 手机号
|
|
|
|
|
* @param {object} param.code 可选,验证码
|
|
|
|
|
* @param {object} param.scene 短信场景
|
|
|
|
|
* @param {object} param.templateId 可选,短信模板id
|
|
|
|
|
* @returns
|
|
|
|
|
*/
|
|
|
|
|
async function sendSmsCode ({
|
|
|
|
|
mobile,
|
|
|
|
|
code,
|
|
|
|
|
scene,
|
|
|
|
|
templateId
|
|
|
|
|
} = {}) {
|
|
|
|
|
const requiredParams = [
|
|
|
|
|
'name',
|
|
|
|
|
'smsKey',
|
|
|
|
|
'smsSecret',
|
|
|
|
|
'codeExpiresIn'
|
|
|
|
|
]
|
|
|
|
|
const smsConfig = (this.config.service && this.config.service.sms) || {}
|
|
|
|
|
for (let i = 0; i < requiredParams.length; i++) {
|
|
|
|
|
const key = requiredParams[i]
|
|
|
|
|
if (!smsConfig[key]) {
|
|
|
|
|
throw new Error(`Missing config param: service.sms.${key}`)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (!code) {
|
|
|
|
|
code = getVerifyCode()
|
|
|
|
|
}
|
|
|
|
|
let action
|
|
|
|
|
switch (scene) {
|
|
|
|
|
case 'login-by-sms':
|
|
|
|
|
action = this.t('login')
|
|
|
|
|
break
|
|
|
|
|
default:
|
|
|
|
|
action = this.t('verify-mobile')
|
|
|
|
|
break
|
|
|
|
|
}
|
|
|
|
|
const sceneConfig = (smsConfig.scene || {})[scene] || {}
|
|
|
|
|
if (!templateId) {
|
|
|
|
|
templateId = sceneConfig.templateId
|
|
|
|
|
}
|
|
|
|
|
if (!templateId) {
|
|
|
|
|
throw new Error('"templateId" is required')
|
|
|
|
|
}
|
|
|
|
|
const codeExpiresIn = sceneConfig.codeExpiresIn || smsConfig.codeExpiresIn
|
|
|
|
|
await setMobileVerifyCode.call(this, {
|
|
|
|
|
mobile,
|
|
|
|
|
code,
|
|
|
|
|
expiresIn: codeExpiresIn,
|
|
|
|
|
scene
|
|
|
|
|
})
|
|
|
|
|
await uniCloud.sendSms({
|
|
|
|
|
smsKey: smsConfig.smsKey,
|
|
|
|
|
smsSecret: smsConfig.smsSecret,
|
|
|
|
|
phone: mobile,
|
|
|
|
|
templateId,
|
|
|
|
|
data: {
|
|
|
|
|
name: smsConfig.name,
|
|
|
|
|
code,
|
|
|
|
|
action,
|
|
|
|
|
expMinute: '' + Math.round(codeExpiresIn / 60)
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
return {
|
|
|
|
|
errCode: 0
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
module.exports = {
|
|
|
|
|
sendSmsCode
|
|
|
|
|
}
|