feat: domain-based reseller binding on registration + test SMS bypass
This commit is contained in:
parent
35750d5938
commit
18913e7064
@ -118,6 +118,8 @@ async def register_user(sor, ns):
|
||||
ns.created_at = timestampstr()
|
||||
ns.login_fail_count = 0
|
||||
ns1 = DictObject(id=id, orgname=ns.username)
|
||||
if ns.get('parentid'):
|
||||
ns1.parentid = ns.parentid
|
||||
await create_org(sor, ns1)
|
||||
roles = [
|
||||
{
|
||||
|
||||
@ -1,14 +1,34 @@
|
||||
# TEST MODE: 不发送真实短信,返回固定验证码 123456
|
||||
phone = params_kw.cellphone
|
||||
if phone is None:
|
||||
return {
|
||||
"status": "error",
|
||||
"data":{
|
||||
"data": {
|
||||
"message": "没有收到手机号"
|
||||
}
|
||||
}
|
||||
# 使用短信模块发布的sms_engine实例生成验证码,参数手机号
|
||||
try:
|
||||
xx = await sms_engine.generate_sms_code(phone)
|
||||
code = '123456'
|
||||
code_id = getID()
|
||||
from datetime import datetime, timedelta
|
||||
expire_time = datetime.now() + timedelta(minutes=5)
|
||||
env = request._run_ns
|
||||
async with get_sor_context(env, 'smssend') as sor:
|
||||
await sor.C('validatecode', {
|
||||
'id': code_id,
|
||||
'vcode': code,
|
||||
'expire_time': expire_time,
|
||||
'del_flg': '0',
|
||||
'create_at': datetime.now()
|
||||
})
|
||||
debug(f'TEST MODE: code_id={code_id}, code={code}, phone={phone}')
|
||||
return {
|
||||
"status": "ok",
|
||||
"data": {
|
||||
"message": f"测试模式: 验证码 {code}",
|
||||
"key": code_id
|
||||
}
|
||||
}
|
||||
except Exception as e:
|
||||
debug(f'gen_sms_code error: {e}')
|
||||
exception(f'gen_sms_code error for {phone}: {e}')
|
||||
@ -18,19 +38,3 @@ except Exception as e:
|
||||
"message": f"发送验证码出错: {e}"
|
||||
}
|
||||
}
|
||||
if xx is None:
|
||||
return {
|
||||
"status": "error",
|
||||
"data": {
|
||||
"message": "发送验证码出错,请检查短信模板配置和百度API连接"
|
||||
}
|
||||
}
|
||||
id, code = xx
|
||||
debug(f'{id=},{code=}')
|
||||
return {
|
||||
"status": "ok",
|
||||
"data": {
|
||||
"message": "短信码已生成",
|
||||
"key": id
|
||||
}
|
||||
}
|
||||
@ -1,6 +1,24 @@
|
||||
debug(f'register.dspy: {params_kw=}')
|
||||
db = DBPools()
|
||||
dbname = get_module_dbname('rbac')
|
||||
|
||||
# 根据注册域名查找所属分销商
|
||||
parentid = None
|
||||
try:
|
||||
host = request.host
|
||||
env = request._run_ns
|
||||
domain_info = await env.get_domain_by_host(request, host)
|
||||
if domain_info:
|
||||
parentid = domain_info.resellerid
|
||||
debug(f'register: domain={host} -> resellerid={parentid}')
|
||||
else:
|
||||
debug(f'register: domain={host} not found in tenant_domain')
|
||||
except Exception as e:
|
||||
exception(f'register: domain lookup error: {e}')
|
||||
|
||||
if parentid:
|
||||
params_kw.parentid = parentid
|
||||
|
||||
async with db.sqlorContext(dbname) as sor:
|
||||
data = await register_user(sor, params_kw)
|
||||
data = DictObject(**data)
|
||||
|
||||
@ -73,6 +73,20 @@ if not ok:
|
||||
}
|
||||
}
|
||||
|
||||
# 根据注册域名查找所属分销商
|
||||
parentid = None
|
||||
try:
|
||||
host = request.host
|
||||
env = request._run_ns
|
||||
domain_info = await env.get_domain_by_host(request, host)
|
||||
if domain_info:
|
||||
parentid = domain_info.resellerid
|
||||
debug(f'sms_register: domain={host} -> resellerid={parentid}')
|
||||
else:
|
||||
debug(f'sms_register: domain={host} not found in tenant_domain')
|
||||
except Exception as e:
|
||||
exception(f'sms_register: domain lookup error: {e}')
|
||||
|
||||
# 短信验证通过,注册用户
|
||||
db = DBPools()
|
||||
dbname = get_module_dbname('rbac')
|
||||
@ -109,6 +123,9 @@ try:
|
||||
password=password,
|
||||
cfm_password=cfm_password
|
||||
)
|
||||
if parentid:
|
||||
reg_params.parentid = parentid
|
||||
|
||||
data = await register_user(sor, reg_params)
|
||||
data = DictObject(**data)
|
||||
if data.status == 'error':
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user