登录接口改造
This commit is contained in:
parent
dd35774400
commit
04321fe6a2
@ -57,6 +57,21 @@ async def check_wechat_login_status(code):
|
||||
except Exception as e:
|
||||
raise e
|
||||
|
||||
async def get_login_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 loginUser(ns):
|
||||
"""
|
||||
@ -65,6 +80,9 @@ async def loginUser(ns):
|
||||
db = DBPools()
|
||||
async with db.sqlorContext('kboss') as sor:
|
||||
if ns:
|
||||
tenant_orgid = await get_login_tenant_orgid(sor, ns)
|
||||
if not tenant_orgid and ns.get('username') not in ['admin', '开元云(北京)科技有限公司']:
|
||||
return {'status': False, 'msg': '未找到当前域名所属租户'}
|
||||
# 处理微信授权后的登录
|
||||
if ns.get('wechatCode'): # 微信扫码登录后的`code`
|
||||
wechat_user_info = await check_wechat_login_status(ns.get('wechatCode'))
|
||||
@ -91,7 +109,8 @@ async def loginUser(ns):
|
||||
if wechat_user_info:
|
||||
openid_f = wechat_user_info['openid']
|
||||
# 查询数据库,查看openid是否已绑定账户
|
||||
userreacs = await sor.R('users', {'wechat_openid': openid_f, 'del_flg': '0'})
|
||||
wechat_sql = """select * from users where wechat_openid = '%s' and tenant_orgid = '%s' and del_flg = '0' limit 1;""" % (openid_f, tenant_orgid)
|
||||
userreacs = await sor.sqlExe(wechat_sql, {})
|
||||
if len(userreacs) >= 1:
|
||||
# 如果openid绑定了用户, 查找用户名和密码 使用账号密码登录
|
||||
ns['username'] = userreacs[0]['username']
|
||||
@ -152,10 +171,12 @@ async def loginUser(ns):
|
||||
type = 0
|
||||
if type1 == 1:
|
||||
# 手机号验证码登录
|
||||
userreacs = await sor.R('users', {'mobile': ns.get('mobile')})
|
||||
user_sql = """select * from users where mobile = '%s' and tenant_orgid = '%s' and del_flg = '0' limit 1;""" % (ns.get('mobile'), tenant_orgid)
|
||||
userreacs = await sor.sqlExe(user_sql, {})
|
||||
|
||||
if not userreacs:
|
||||
userreacs = await sor.R('users', {'username': ns.get('username')})
|
||||
user_sql = """select * from users where username = '%s' and tenant_orgid = '%s' and del_flg = '0' limit 1;""" % (ns.get('username'), tenant_orgid)
|
||||
userreacs = await sor.sqlExe(user_sql, {})
|
||||
|
||||
# 如果是微信扫码后绑定已有账号
|
||||
if ns.get('wechat_openid'):
|
||||
@ -170,14 +191,17 @@ async def loginUser(ns):
|
||||
else:
|
||||
ns['password'] = password_encode(ns['password'])
|
||||
ns['del_flg'] = '0'
|
||||
userreacs = await sor.R('users', {'username': ns.get('username'), 'password': ns.get('password')})
|
||||
if ns.get('username') in ['admin', '开元云(北京)科技有限公司']:
|
||||
userreacs = await sor.R('users', {'username': ns.get('username'), 'password': ns.get('password'), 'del_flg': '0'})
|
||||
else:
|
||||
user_sql = """select * from users where username = '%s' and password = '%s' and tenant_orgid = '%s' and del_flg = '0' limit 1;""" % (ns.get('username'), ns.get('password'), tenant_orgid)
|
||||
userreacs = await sor.sqlExe(user_sql, {})
|
||||
if len(userreacs) >= 1:
|
||||
type += 1
|
||||
await remember_user(userreacs[0]['id'], username=userreacs[0]['username'], userorgid=userreacs[0]['orgid'])
|
||||
else:
|
||||
ns['mobile'] = ns['username']
|
||||
ns.pop('username')
|
||||
userreacs = await sor.R('users', ns)
|
||||
user_sql = """select * from users where mobile = '%s' and password = '%s' and tenant_orgid = '%s' and del_flg = '0' limit 1;""" % (ns.get('username'), ns.get('password'), tenant_orgid)
|
||||
userreacs = await sor.sqlExe(user_sql, {})
|
||||
if len(userreacs) >= 1:
|
||||
type += 1
|
||||
await remember_user(userreacs[0]['id'], username=userreacs[0]['username'], userorgid=userreacs[0]['orgid'])
|
||||
|
||||
@ -93,6 +93,22 @@ async def check_login_allowed(user_name):
|
||||
print("exception:", user_name, e)
|
||||
return {'status': False, 'msg': '登录操作失败, %s' % str(e)}
|
||||
|
||||
async def get_login_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 logintype(ns):
|
||||
"""
|
||||
1、判断用户是否为主级(如果在reseller没要找到数据,证明就是主级)
|
||||
@ -140,11 +156,16 @@ async def logintype(ns):
|
||||
async with db.sqlorContext('kboss') as sor:
|
||||
|
||||
domain_name = ns.get('domain_name')
|
||||
tenant_orgid = await get_login_tenant_orgid(sor, ns)
|
||||
if not tenant_orgid and ns.get('username') != 'admin':
|
||||
return {'status': False, 'msg': '未找到当前域名所属租户'}
|
||||
login_name = ns.get('username') or ns.get('mobile') or ''
|
||||
login_fail_key = '%s:%s' % (tenant_orgid, login_name)
|
||||
# if domain_name in ['www.opencomputing.cn', 'dev.opencomputing.cn', 'localhost:9527', 'www.ncmatch.cn'] and ns.get('username') not in ['开元云(北京)科技有限公司', 'admin', 'kyy_root', 'kyy_kaiyuan', 'kyacloud', 'kyy_运营', 'kyy_销售', 'kyy_财务', '测试用户', 'kycloud']:
|
||||
if domain_name in ['www.opencomputing.cn', 'dev.opencomputing.cn', 'localhost:9527', 'www.ncmatch.cn'] and not ns.get('username') and not ns.get('codeid'):
|
||||
|
||||
# 登录失败次数限制
|
||||
login_allowed = await check_login_allowed(ns.get('username'))
|
||||
login_allowed = await check_login_allowed(login_fail_key)
|
||||
if not login_allowed.get('status'):
|
||||
return {'status': False, 'msg': login_allowed.get('msg')}
|
||||
|
||||
@ -153,7 +174,8 @@ async def logintype(ns):
|
||||
'status': False,
|
||||
'msg': '请输入手机号'
|
||||
}
|
||||
real_mobile_li = await sor.R('users', {'username': ns['username']})
|
||||
real_mobile_sql = """select * from users where username = '%s' and tenant_orgid = '%s' and del_flg = '0' limit 1;""" % (ns.get('username'), tenant_orgid)
|
||||
real_mobile_li = await sor.sqlExe(real_mobile_sql, {})
|
||||
if not real_mobile_li:
|
||||
return {
|
||||
'status': False,
|
||||
@ -179,13 +201,14 @@ async def logintype(ns):
|
||||
}
|
||||
code = await sor.R('validatecode', {'id': ns.get('codeid'), 'vcode': ns.get('vcode')})
|
||||
if len(code) < 1:
|
||||
await handle_login_failed(ns.get('username'))
|
||||
await handle_login_failed(login_fail_key)
|
||||
return {'status': False, 'msg': '验证码不正确'}
|
||||
|
||||
password = password_encode(ns['password'])
|
||||
users = await sor.R('users', {'username': ns.get('username'), 'password': password})
|
||||
users_sql = """select * from users where username = '%s' and password = '%s' and tenant_orgid = '%s' and del_flg = '0' limit 1;""" % (ns.get('username'), password, tenant_orgid)
|
||||
users = await sor.sqlExe(users_sql, {})
|
||||
if len(users) < 1:
|
||||
await handle_login_failed(ns.get('username'))
|
||||
await handle_login_failed(login_fail_key)
|
||||
return {"status": False,'msg':'用户名或密码错误'}
|
||||
|
||||
return {'status': True}
|
||||
@ -199,14 +222,20 @@ async def logintype(ns):
|
||||
return {'status': False, 'msg': '验证码不正确'}
|
||||
if type == 1:
|
||||
# 手机号登录
|
||||
users = await sor.R('users', {'mobile': ns.get('mobile')})
|
||||
users_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(users_sql, {})
|
||||
if not users:
|
||||
users = await sor.R('users', {'username': ns.get('username')})
|
||||
users_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(users_sql, {})
|
||||
else:
|
||||
password = password_encode(ns['password'])
|
||||
users = await sor.R('users', {'username': ns.get('username'), 'password': password})
|
||||
if ns.get('username') == 'admin':
|
||||
users = await sor.R('users', {'username': ns.get('username'), 'password': password})
|
||||
else:
|
||||
users_sql = """select * from users where username = '%s' and password = '%s' and tenant_orgid = '%s' and del_flg = '0' limit 1;""" % (ns.get('username'), password, tenant_orgid)
|
||||
users = await sor.sqlExe(users_sql, {})
|
||||
if len(users) < 1:
|
||||
await handle_login_failed(ns.get('username'))
|
||||
await handle_login_failed(login_fail_key)
|
||||
return {"status": False,'msg':'用户名或密码错误'}
|
||||
elif ns.get('username') == "admin":
|
||||
return {'status': True}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user