async def mobilecode(ns): """发送短信验证码,支持注册和登录筛选""" db = DBPools() async with db.sqlorContext('kboss') as sor: # 获取操作类型:register 或 login action_type = ns.get('action_type') # register 或 login # 通过手机号查找用户 mobile = ns.get('mobile') if not mobile: return {'status': False, 'msg': '手机号不能为空'} userreacs = await sor.R('users', {'mobile': mobile, 'del_flg': '0'}) # 注册逻辑:检查手机号是否已存在 if action_type == 'register': if len(userreacs) >= 1: return {'status': False, 'msg': '手机号已注册,请直接登录'} else: # 注册时手机号不存在,可以发送验证码 code = await generate_vcode() nss = await send_vcode(mobile, '用户注册验证', {'SMSvCode': code.get('vcode')}) if nss: return {'status': True, 'msg': '注册验证码发送成功', 'codeid': code.get('id')} else: return {'status': False, 'msg': '发送失败'} # 登录逻辑:检查手机号是否存在 elif action_type == 'login': if len(userreacs) >= 1: # 登录时手机号存在,可以发送验证码 code = await generate_vcode() nss = await send_vcode(userreacs[0]['mobile'], '用户登录验证', {'SMSvCode': code.get('vcode')}) if nss: return {'status': True, 'msg': '登录验证码发送成功', 'codeid': code.get('id')} else: return {'status': False, 'msg': '发送失败'} else: return {'status': False, 'action': 'redirect', 'msg': '用户未注册, 请到注册页面注册'} # 原有逻辑:如果没有指定action_type,保持原有逻辑 else: type = 0 ns['del_flg'] = '0' userreacs = await sor.R('users', ns) if len(userreacs) >= 1: type += 1 else: userreacs = await sor.R('users', {'mobile': ns['username'], 'del_flg': '0'}) if len(userreacs) >= 1: type += 1 if type >= 1: code = await generate_vcode() nss = await send_vcode(userreacs[0]['mobile'], '用户注册登录验证', {'SMSvCode': code.get('vcode')}) # return {'1':nss} if nss: return {'status': True, 'msg': '发送成功', 'codeid': code.get('id')} else: return {'status': False, 'msg': '发送失败'} else: return {'status': False, 'action': 'redirect', 'msg': '用户未注册, 请到注册页面注册'} ret = await mobilecode(params_kw) return ret