|
@@ -21,6 +21,7 @@ from common import YzyApi
|
|
|
from models import *
|
|
|
from urllib.parse import quote
|
|
|
import requests
|
|
|
+import traceback
|
|
|
|
|
|
router = APIRouter()
|
|
|
|
|
@@ -75,142 +76,150 @@ async def login(
|
|
|
db: Session = Depends(get_db),
|
|
|
data: dict = Depends(remove_xss_json)
|
|
|
):
|
|
|
- # tenantId = data['tenantId']
|
|
|
- username = data['username']
|
|
|
- password = data['password']
|
|
|
- # rememberMe = data['rememberMe']
|
|
|
- uuid_str = data['uuid']
|
|
|
- code = data['code']
|
|
|
- # clientId = data['clientId']
|
|
|
- # grantType = data['grantType']
|
|
|
-
|
|
|
- # 仅为了可能的兼容
|
|
|
- clientId = "e5cd7e4891bf95d1d19206ce24a7b32e"
|
|
|
- grantType = "password"
|
|
|
-
|
|
|
- uuid = buildVerificationCodeRedisKey(uuid_str)
|
|
|
- redis_key = "kaptcha_" + uuid
|
|
|
- redis_code = redis_get(redis_key)
|
|
|
- if code is None or code != redis_code:
|
|
|
- return {
|
|
|
- "code": 500,
|
|
|
- "msg": "图片验证码不正确",
|
|
|
- }
|
|
|
+ try:
|
|
|
+ # tenantId = data['tenantId']
|
|
|
+ username = data['username']
|
|
|
+ password = data['password']
|
|
|
+ # rememberMe = data['rememberMe']
|
|
|
+ uuid_str = data['uuid']
|
|
|
+ code = data['code']
|
|
|
+ # clientId = data['clientId']
|
|
|
+ # grantType = data['grantType']
|
|
|
+
|
|
|
+ # 仅为了可能的兼容
|
|
|
+ clientId = "e5cd7e4891bf95d1d19206ce24a7b32e"
|
|
|
+ grantType = "password"
|
|
|
+
|
|
|
+ uuid = buildVerificationCodeRedisKey(uuid_str)
|
|
|
+ redis_key = "kaptcha_" + uuid
|
|
|
+ redis_code = redis_get(redis_key)
|
|
|
+ if code is None or code != redis_code:
|
|
|
+ return {
|
|
|
+ "code": 500,
|
|
|
+ "msg": "图片验证码不正确",
|
|
|
+ }
|
|
|
|
|
|
- redis_login_key = "login_user_" + username
|
|
|
- login_error_times = redis_get(redis_login_key)
|
|
|
- if login_error_times is None:
|
|
|
- login_error_times = 0
|
|
|
- else:
|
|
|
- login_error_times = int(login_error_times)
|
|
|
+ redis_login_key = "login_user_" + username
|
|
|
+ login_error_times = redis_get(redis_login_key)
|
|
|
+ if login_error_times is None:
|
|
|
+ login_error_times = 0
|
|
|
+ else:
|
|
|
+ login_error_times = int(login_error_times)
|
|
|
|
|
|
- if login_error_times >= 5:
|
|
|
- return {
|
|
|
- "code": 500,
|
|
|
- "msg": "登录错误多,请5分钟后再尝试!",
|
|
|
- }
|
|
|
+ if login_error_times >= 5:
|
|
|
+ return {
|
|
|
+ "code": 500,
|
|
|
+ "msg": "登录错误多,请5分钟后再尝试!",
|
|
|
+ }
|
|
|
|
|
|
- password = ase_utils.aesDecrypt(uuid_str, password)
|
|
|
- logger.info('userpass: {}', password)
|
|
|
+ password = ase_utils.aesDecrypt(uuid_str, password)
|
|
|
+ logger.info('userpass: {}', password)
|
|
|
|
|
|
- row = db.query(SysUser).filter(SysUser.user_name == username).first()
|
|
|
+ row = db.query(SysUser).filter(SysUser.user_name == username).first()
|
|
|
|
|
|
- if row is None:
|
|
|
- login_error_times = login_error_times + 1
|
|
|
- redis_set_with_time(redis_login_key, str(login_error_times), 300)
|
|
|
- return JSONResponse(status_code=404, content={"code": 404, "msg": "帐号或者密码错误"})
|
|
|
- # return {
|
|
|
- # "error": 1,
|
|
|
- # "errmsg": "帐号或者密码错误",
|
|
|
- # }
|
|
|
+ if row is None:
|
|
|
+ login_error_times = login_error_times + 1
|
|
|
+ redis_set_with_time(redis_login_key, str(login_error_times), 300)
|
|
|
+ return JSONResponse(status_code=404, content={"code": 404, "msg": "帐号或者密码错误"})
|
|
|
+ # return {
|
|
|
+ # "error": 1,
|
|
|
+ # "errmsg": "帐号或者密码错误",
|
|
|
+ # }
|
|
|
|
|
|
- logger.info('row.password: {}', row.password)
|
|
|
- if verify_password(password, row.password) == False:
|
|
|
- login_error_times = login_error_times + 1
|
|
|
- redis_set_with_time(redis_login_key, str(login_error_times), 300)
|
|
|
+ logger.info('row.password: {}', row.password)
|
|
|
+ if verify_password(password, row.password) == False:
|
|
|
+ login_error_times = login_error_times + 1
|
|
|
+ redis_set_with_time(redis_login_key, str(login_error_times), 300)
|
|
|
|
|
|
- return JSONResponse(status_code=404, content={"code":404,"msg":"帐号或者密码错误"})
|
|
|
+ return JSONResponse(status_code=404, content={"code":404,"msg":"帐号或者密码错误"})
|
|
|
|
|
|
- '''
|
|
|
- m = hashlib.md5()
|
|
|
- m.update(userpass.encode('utf-8'))
|
|
|
- password_md5 = m.hexdigest()
|
|
|
+ '''
|
|
|
+ m = hashlib.md5()
|
|
|
+ m.update(userpass.encode('utf-8'))
|
|
|
+ password_md5 = m.hexdigest()
|
|
|
|
|
|
- password_db = row.password
|
|
|
+ password_db = row.password
|
|
|
|
|
|
- if password_md5 != password_db:
|
|
|
- login_error_times = login_error_times + 1
|
|
|
- redis_set_with_time(redis_login_key, str(login_error_times), 300)
|
|
|
+ if password_md5 != password_db:
|
|
|
+ login_error_times = login_error_times + 1
|
|
|
+ redis_set_with_time(redis_login_key, str(login_error_times), 300)
|
|
|
|
|
|
- return {
|
|
|
- "error": 1,
|
|
|
- "errmsg": "帐号或者密码错误",
|
|
|
- }
|
|
|
-
|
|
|
- # 校验长期(超过1个月)未使用的账号和及开通后未及时(如72小时)修改初始密码的账号做清除
|
|
|
- last_login_time = datetime.fromtimestamp(row.last_login_time)
|
|
|
- if row.login == 0:
|
|
|
- # 计算初始化的时间和当前时间相差的小时数
|
|
|
- diff_hour = (datetime.now() - last_login_time).seconds/3600
|
|
|
- if diff_hour > 72:
|
|
|
- return {
|
|
|
- "error": 1,
|
|
|
- "errmsg": "你的账号在开通后(72小时)内未登录及修改初始密码,账号已被锁定,请联系管理员处理,否则将被清除。",
|
|
|
- }
|
|
|
- else:
|
|
|
- # 计算上次登录到当前时间的相差天数
|
|
|
- diff_day = (datetime.now() - last_login_time).days
|
|
|
- if diff_day > 30:
|
|
|
return {
|
|
|
"error": 1,
|
|
|
- "errmsg": "你的账号在超过30天未登录使用,账号已被锁定,请联系管理员处理,否则将被清除。",
|
|
|
+ "errmsg": "帐号或者密码错误",
|
|
|
}
|
|
|
|
|
|
- redis_set_with_time(redis_login_key, str(0), 1)
|
|
|
-
|
|
|
- '''
|
|
|
- user_id = str(row.user_id)
|
|
|
-
|
|
|
- auth = {
|
|
|
- "user_id": user_id,
|
|
|
- "user_name": row.user_name,
|
|
|
- "nick_name": row.nick_name,
|
|
|
- "is_yzy_user": "0"
|
|
|
- }
|
|
|
+ # 校验长期(超过1个月)未使用的账号和及开通后未及时(如72小时)修改初始密码的账号做清除
|
|
|
+ last_login_time = datetime.fromtimestamp(row.last_login_time)
|
|
|
+ if row.login == 0:
|
|
|
+ # 计算初始化的时间和当前时间相差的小时数
|
|
|
+ diff_hour = (datetime.now() - last_login_time).seconds/3600
|
|
|
+ if diff_hour > 72:
|
|
|
+ return {
|
|
|
+ "error": 1,
|
|
|
+ "errmsg": "你的账号在开通后(72小时)内未登录及修改初始密码,账号已被锁定,请联系管理员处理,否则将被清除。",
|
|
|
+ }
|
|
|
+ else:
|
|
|
+ # 计算上次登录到当前时间的相差天数
|
|
|
+ diff_day = (datetime.now() - last_login_time).days
|
|
|
+ if diff_day > 30:
|
|
|
+ return {
|
|
|
+ "error": 1,
|
|
|
+ "errmsg": "你的账号在超过30天未登录使用,账号已被锁定,请联系管理员处理,否则将被清除。",
|
|
|
+ }
|
|
|
+
|
|
|
+ redis_set_with_time(redis_login_key, str(0), 1)
|
|
|
+
|
|
|
+ '''
|
|
|
+ user_id = str(row.user_id)
|
|
|
+
|
|
|
+ auth = {
|
|
|
+ "user_id": user_id,
|
|
|
+ "user_name": row.user_name,
|
|
|
+ "nick_name": row.nick_name,
|
|
|
+ "is_yzy_user": "0"
|
|
|
+ }
|
|
|
|
|
|
- request.session['user_auth'] = auth
|
|
|
- request.session['user_auth_sign'] = data_auth_sign(auth)
|
|
|
- request.session['user_name'] = username
|
|
|
+ request.session['user_auth'] = auth
|
|
|
+ request.session['user_auth_sign'] = data_auth_sign(auth)
|
|
|
+ request.session['user_name'] = username
|
|
|
|
|
|
- # db_czrz_serv.log_username(db, row.uid, row.username, "登录", "后台管理账号+密码登录成功", request.client.host)
|
|
|
- row.login_date = datetime.now()
|
|
|
- row.login_ip = request.client.host
|
|
|
- # row.login = row.login + 1
|
|
|
- db.commit()
|
|
|
+ # db_czrz_serv.log_username(db, row.uid, row.username, "登录", "后台管理账号+密码登录成功", request.client.host)
|
|
|
+ row.login_date = datetime.now()
|
|
|
+ row.login_ip = request.client.host
|
|
|
+ # row.login = row.login + 1
|
|
|
+ db.commit()
|
|
|
|
|
|
- access_token_expires = timedelta(days = 5)
|
|
|
- access_token = security.create_access_token(
|
|
|
- data={"sub": user_id}, expires_delta = access_token_expires
|
|
|
- )
|
|
|
+ access_token_expires = timedelta(days = 5)
|
|
|
+ access_token = security.create_access_token(
|
|
|
+ data={"sub": user_id}, expires_delta = access_token_expires
|
|
|
+ )
|
|
|
|
|
|
- refresh_token_expires = timedelta(days = 5)
|
|
|
- refresh_token = security.create_access_token(
|
|
|
- data={"sub": user_id}, expires_delta = refresh_token_expires
|
|
|
- )
|
|
|
+ refresh_token_expires = timedelta(days = 5)
|
|
|
+ refresh_token = security.create_access_token(
|
|
|
+ data={"sub": user_id}, expires_delta = refresh_token_expires
|
|
|
+ )
|
|
|
|
|
|
- return {
|
|
|
- "code": 200,
|
|
|
- "msg": "操作成功",
|
|
|
- "data": {
|
|
|
- "access_token": access_token,
|
|
|
- "refresh_token": refresh_token,
|
|
|
- "expire_in": 7200,
|
|
|
- "refresh_expire_in": 7200,
|
|
|
- "client_id": clientId,
|
|
|
- "scope": "",
|
|
|
- "openid": ""
|
|
|
+ return {
|
|
|
+ "code": 200,
|
|
|
+ "msg": "操作成功",
|
|
|
+ "data": {
|
|
|
+ "access_token": access_token,
|
|
|
+ "refresh_token": refresh_token,
|
|
|
+ "expire_in": 7200,
|
|
|
+ "refresh_expire_in": 7200,
|
|
|
+ "client_id": clientId,
|
|
|
+ "scope": "",
|
|
|
+ "openid": ""
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ except Exception as e:
|
|
|
+ traceback.print_exc()
|
|
|
+ return {
|
|
|
+ "code": 500,
|
|
|
+ "msg": "帐号或者密码错误"
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
@router.post('/logout')
|
|
|
async def logout(
|