Files
film-management-backend/src/modules/user/service/sms.ts
T

80 lines
1.9 KiB
TypeScript

import { Provide, Config, Inject, Init, InjectClient } from '@midwayjs/core';
import { BaseService, CoolCommException } from '@cool-midway/core';
import * as _ from 'lodash';
import { CachingFactory, MidwayCache } from '@midwayjs/cache-manager';
import { PluginService } from '../../plugin/service/info';
/**
* 描述
*/
@Provide()
export class UserSmsService extends BaseService {
// 获得模块的配置信息
@Config('module.user.sms')
config;
@InjectClient(CachingFactory, 'default')
midwayCache: MidwayCache;
@Inject()
pluginService: PluginService;
plugin;
@Init()
async init() {
for (const key of ['sms-tx', 'sms-ali']) {
try {
this.plugin = await this.pluginService.getInstance(key);
if (this.plugin) {
this.config.pluginKey = key;
break;
}
} catch (e) {
continue;
}
}
}
/**
* 发送验证码
* @param phone
*/
async sendSms(phone) {
// 随机四位验证码
const code = _.random(1000, 9999);
const pluginKey = this.config.pluginKey;
if (!this.plugin)
throw new CoolCommException(
'未配置短信插件,请到插件市场下载安装配置:https://cool-js.com/plugin?keyWord=短信'
);
try {
if (pluginKey == 'sms-tx') {
await this.plugin.send([phone], [code]);
}
if (pluginKey == 'sms-ali') {
await this.plugin.send([phone], {
code,
});
}
this.midwayCache.set(`sms:${phone}`, code, this.config.timeout * 1000);
} catch (error) {
throw new CoolCommException('发送过于频繁,请稍后再试');
}
}
/**
* 验证验证码
* @param phone
* @param code
* @returns
*/
async checkCode(phone, code) {
const cacheCode = await this.midwayCache.get(`sms:${phone}`);
if (code && cacheCode == code) {
return true;
}
return false;
}
}