忘记密码和发送短信改造
This commit is contained in:
parent
04321fe6a2
commit
52d9bb16f8
@ -1,3 +1,19 @@
|
|||||||
|
async def get_password_tenant_orgid(sor, ns):
|
||||||
|
domain_name = ns.get('domain_name')
|
||||||
|
if (not domain_name) and ns.get('url_link'):
|
||||||
|
domain_name = ns.get('url_link').split("//")[1].split("/")[0]
|
||||||
|
if domain_name:
|
||||||
|
domain_name = domain_name.strip().replace('https://', '').replace('http://', '').replace('/', '')
|
||||||
|
if 'localhost' in domain_name:
|
||||||
|
domain_name = 'dev.opencomputing.cn'
|
||||||
|
reseller = await sor.R('reseller', {'domain_name': domain_name, 'del_flg': '0'})
|
||||||
|
if len(reseller) >= 1:
|
||||||
|
return reseller[0]['orgid']
|
||||||
|
org = await sor.R('organization', {'org_type': '0', 'del_flg': '0'})
|
||||||
|
if len(org) >= 1:
|
||||||
|
return org[0]['id']
|
||||||
|
return None
|
||||||
|
|
||||||
async def forgotPassword(ns):
|
async def forgotPassword(ns):
|
||||||
"""
|
"""
|
||||||
忘记密码:校验短信验证码后重置密码。
|
忘记密码:校验短信验证码后重置密码。
|
||||||
@ -25,6 +41,10 @@ async def forgotPassword(ns):
|
|||||||
db = DBPools()
|
db = DBPools()
|
||||||
async with db.sqlorContext('kboss') as sor:
|
async with db.sqlorContext('kboss') as sor:
|
||||||
try:
|
try:
|
||||||
|
tenant_orgid = await get_password_tenant_orgid(sor, ns)
|
||||||
|
if not tenant_orgid:
|
||||||
|
return {'status': False, 'msg': '未找到当前域名所属租户'}
|
||||||
|
|
||||||
code = await sor.R('validatecode', {'id': ns.get('codeid'), 'vcode': ns.get('vcode')})
|
code = await sor.R('validatecode', {'id': ns.get('codeid'), 'vcode': ns.get('vcode')})
|
||||||
if code:
|
if code:
|
||||||
create_at = code[0]['create_at']
|
create_at = code[0]['create_at']
|
||||||
@ -37,17 +57,21 @@ async def forgotPassword(ns):
|
|||||||
|
|
||||||
user = None
|
user = None
|
||||||
if ns.get('id'):
|
if ns.get('id'):
|
||||||
users = await sor.R('users', {'id': ns.get('id'), 'del_flg': '0'})
|
user_sql = """select * from users where id = '%s' and tenant_orgid = '%s' and del_flg = '0' limit 1;""" % (ns.get('id'), tenant_orgid)
|
||||||
|
users = await sor.sqlExe(user_sql, {})
|
||||||
if users:
|
if users:
|
||||||
user = users[0]
|
user = users[0]
|
||||||
elif ns.get('mobile'):
|
elif ns.get('mobile'):
|
||||||
users = await sor.R('users', {'mobile': ns.get('mobile'), 'del_flg': '0'})
|
user_sql = """select * from users where mobile = '%s' and tenant_orgid = '%s' and del_flg = '0' limit 1;""" % (ns.get('mobile'), tenant_orgid)
|
||||||
|
users = await sor.sqlExe(user_sql, {})
|
||||||
if users:
|
if users:
|
||||||
user = users[0]
|
user = users[0]
|
||||||
elif ns.get('username'):
|
elif ns.get('username'):
|
||||||
users = await sor.R('users', {'username': ns.get('username'), 'del_flg': '0'})
|
user_sql = """select * from users where username = '%s' and tenant_orgid = '%s' and del_flg = '0' limit 1;""" % (ns.get('username'), tenant_orgid)
|
||||||
|
users = await sor.sqlExe(user_sql, {})
|
||||||
if not users:
|
if not users:
|
||||||
users = await sor.R('users', {'mobile': ns.get('username'), 'del_flg': '0'})
|
user_sql = """select * from users where mobile = '%s' and tenant_orgid = '%s' and del_flg = '0' limit 1;""" % (ns.get('username'), tenant_orgid)
|
||||||
|
users = await sor.sqlExe(user_sql, {})
|
||||||
if users:
|
if users:
|
||||||
user = users[0]
|
user = users[0]
|
||||||
else:
|
else:
|
||||||
|
|||||||
@ -65,10 +65,30 @@ async def handle_login_failed(mobile: str) -> bool:
|
|||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
async def get_mobilecode_tenant_orgid(sor, ns):
|
||||||
|
domain_name = ns.get('domain_name')
|
||||||
|
if (not domain_name) and ns.get('url_link'):
|
||||||
|
domain_name = ns.get('url_link').split("//")[1].split("/")[0]
|
||||||
|
if domain_name:
|
||||||
|
domain_name = domain_name.strip().replace('https://', '').replace('http://', '').replace('/', '')
|
||||||
|
if 'localhost' in domain_name:
|
||||||
|
domain_name = 'dev.opencomputing.cn'
|
||||||
|
reseller = await sor.R('reseller', {'domain_name': domain_name, 'del_flg': '0'})
|
||||||
|
if len(reseller) >= 1:
|
||||||
|
return reseller[0]['orgid']
|
||||||
|
org = await sor.R('organization', {'org_type': '0', 'del_flg': '0'})
|
||||||
|
if len(org) >= 1:
|
||||||
|
return org[0]['id']
|
||||||
|
return None
|
||||||
|
|
||||||
async def mobilecode(ns):
|
async def mobilecode(ns):
|
||||||
"""发送短信验证码,支持注册和登录筛选"""
|
"""发送短信验证码,支持注册和登录筛选"""
|
||||||
db = DBPools()
|
db = DBPools()
|
||||||
async with db.sqlorContext('kboss') as sor:
|
async with db.sqlorContext('kboss') as sor:
|
||||||
|
tenant_orgid = await get_mobilecode_tenant_orgid(sor, ns)
|
||||||
|
if not tenant_orgid:
|
||||||
|
return {'status': False, 'msg': '未找到当前域名所属租户'}
|
||||||
|
|
||||||
# 获取操作类型:register 或 login
|
# 获取操作类型:register 或 login
|
||||||
action_type = ns.get('action_type') # register 或 login
|
action_type = ns.get('action_type') # register 或 login
|
||||||
|
|
||||||
@ -81,11 +101,13 @@ async def mobilecode(ns):
|
|||||||
return {'status': False, 'msg': '手机号不能为空'}
|
return {'status': False, 'msg': '手机号不能为空'}
|
||||||
|
|
||||||
# 检查短信发送限制
|
# 检查短信发送限制
|
||||||
can_send = await handle_login_failed(mobile)
|
sms_limit_key = '%s:%s' % (tenant_orgid[:8], mobile)
|
||||||
|
can_send = await handle_login_failed(sms_limit_key)
|
||||||
if not can_send:
|
if not can_send:
|
||||||
return {'status': False, 'msg': '发送过于频繁,请10分钟后再试'}
|
return {'status': False, 'msg': '发送过于频繁,请10分钟后再试'}
|
||||||
|
|
||||||
userreacs = await sor.R('users', {'mobile': mobile, 'del_flg': '0'})
|
user_sql = """select * from users where mobile = '%s' and tenant_orgid = '%s' and del_flg = '0' limit 1;""" % (mobile, tenant_orgid)
|
||||||
|
userreacs = await sor.sqlExe(user_sql, {})
|
||||||
|
|
||||||
# 注册逻辑:检查手机号是否已存在
|
# 注册逻辑:检查手机号是否已存在
|
||||||
if action_type == 'register':
|
if action_type == 'register':
|
||||||
@ -128,12 +150,14 @@ async def mobilecode(ns):
|
|||||||
# 原有逻辑:如果没有指定action_type,保持原有逻辑
|
# 原有逻辑:如果没有指定action_type,保持原有逻辑
|
||||||
else:
|
else:
|
||||||
type = 0
|
type = 0
|
||||||
ns['del_flg'] = '0'
|
username = ns.get('username')
|
||||||
userreacs = await sor.R('users', ns)
|
user_sql = """select * from users where username = '%s' and tenant_orgid = '%s' and del_flg = '0' limit 1;""" % (username, tenant_orgid)
|
||||||
|
userreacs = await sor.sqlExe(user_sql, {})
|
||||||
if len(userreacs) >= 1:
|
if len(userreacs) >= 1:
|
||||||
type += 1
|
type += 1
|
||||||
else:
|
else:
|
||||||
userreacs = await sor.R('users', {'mobile': ns['username'], 'del_flg': '0'})
|
user_sql = """select * from users where mobile = '%s' and tenant_orgid = '%s' and del_flg = '0' limit 1;""" % (username, tenant_orgid)
|
||||||
|
userreacs = await sor.sqlExe(user_sql, {})
|
||||||
if len(userreacs) >= 1:
|
if len(userreacs) >= 1:
|
||||||
type += 1
|
type += 1
|
||||||
if type >= 1:
|
if type >= 1:
|
||||||
|
|||||||
@ -1,14 +1,37 @@
|
|||||||
|
async def get_retrieve_tenant_orgid(sor, ns):
|
||||||
|
domain_name = ns.get('domain_name')
|
||||||
|
if (not domain_name) and ns.get('url_link'):
|
||||||
|
domain_name = ns.get('url_link').split("//")[1].split("/")[0]
|
||||||
|
if domain_name:
|
||||||
|
domain_name = domain_name.strip().replace('https://', '').replace('http://', '').replace('/', '')
|
||||||
|
if 'localhost' in domain_name:
|
||||||
|
domain_name = 'dev.opencomputing.cn'
|
||||||
|
reseller = await sor.R('reseller', {'domain_name': domain_name, 'del_flg': '0'})
|
||||||
|
if len(reseller) >= 1:
|
||||||
|
return reseller[0]['orgid']
|
||||||
|
org = await sor.R('organization', {'org_type': '0', 'del_flg': '0'})
|
||||||
|
if len(org) >= 1:
|
||||||
|
return org[0]['id']
|
||||||
|
return None
|
||||||
|
|
||||||
async def retrievecode(ns):
|
async def retrievecode(ns):
|
||||||
"""找回密码发送短信验证码"""
|
"""找回密码发送短信验证码"""
|
||||||
db = DBPools()
|
db = DBPools()
|
||||||
async with db.sqlorContext('kboss') as sor:
|
async with db.sqlorContext('kboss') as sor:
|
||||||
|
tenant_orgid = await get_retrieve_tenant_orgid(sor, ns)
|
||||||
|
if not tenant_orgid:
|
||||||
|
return {'status': False, 'msg': '未找到当前域名所属租户'}
|
||||||
type = 0
|
type = 0
|
||||||
ns['del_flg'] = '0'
|
username = ns.get('username') or ns.get('mobile')
|
||||||
userreacs = await sor.R('users', ns)
|
if not username:
|
||||||
|
return {'status': False, 'msg': '用户标识不能为空'}
|
||||||
|
user_sql = """select * from users where username = '%s' and tenant_orgid = '%s' and del_flg = '0' limit 1;""" % (username, tenant_orgid)
|
||||||
|
userreacs = await sor.sqlExe(user_sql, {})
|
||||||
if len(userreacs) >= 1:
|
if len(userreacs) >= 1:
|
||||||
type += 1
|
type += 1
|
||||||
else:
|
else:
|
||||||
userreacs = await sor.R('users', {'mobile': ns['username'], 'del_flg': '0'})
|
user_sql = """select * from users where mobile = '%s' and tenant_orgid = '%s' and del_flg = '0' limit 1;""" % (username, tenant_orgid)
|
||||||
|
userreacs = await sor.sqlExe(user_sql, {})
|
||||||
if len(userreacs) >= 1:
|
if len(userreacs) >= 1:
|
||||||
type += 1
|
type += 1
|
||||||
if type >= 1:
|
if type >= 1:
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user