mirror of
https://github.com/xinnan-tech/xiaozhi-esp32-server.git
synced 2026-07-24 08:03:53 +08:00
增加通过认证码绑定设备和管理账户的功能,需要开启私有设备配置
增加登录用户鉴权
This commit is contained in:
+13
-25
@@ -1,14 +1,13 @@
|
||||
import logging
|
||||
from aiohttp import web
|
||||
import datetime
|
||||
from core.utils.util import check_password
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class RegisterHandler:
|
||||
def __init__(self, config):
|
||||
self.config = config
|
||||
def __init__(self, user_manager):
|
||||
self.user_manager = user_manager
|
||||
|
||||
async def handle_register(self, request):
|
||||
"""处理注册请求"""
|
||||
@@ -17,12 +16,6 @@ class RegisterHandler:
|
||||
username = data.get('username')
|
||||
password = data.get('password')
|
||||
|
||||
if not check_password(password):
|
||||
return web.json_response({
|
||||
'success': False,
|
||||
'message': '密码必须包含大小写字母、数字且长度至少8位'
|
||||
})
|
||||
|
||||
if not username or not password:
|
||||
logger.warning(f"Registration attempt with empty credentials from {request.remote}")
|
||||
return web.json_response({
|
||||
@@ -30,28 +23,23 @@ class RegisterHandler:
|
||||
'message': '用户名和密码不能为空'
|
||||
})
|
||||
|
||||
users = self.config.get('users', {})
|
||||
# 由于现在所有用户都能看到所有设备,从安全角度上考虑,只允许注册一个用户
|
||||
# 未来绑定设备功能完成后,再放开任意注册
|
||||
if len(users) >= 1:
|
||||
return web.json_response({
|
||||
'success': False,
|
||||
'message': '系统已经初始化过了,如果忘记了密码,请直接删除“.secrets.yaml”文件,删除后重启本服务'
|
||||
})
|
||||
|
||||
if username in users:
|
||||
# 检查用户是否已存在
|
||||
if await self.user_manager.get_user(username):
|
||||
logger.warning(f"Registration attempt with existing username {username} from {request.remote}")
|
||||
return web.json_response({
|
||||
'success': False,
|
||||
'message': '用户名已存在'
|
||||
})
|
||||
|
||||
# 存储新用户
|
||||
self.config['users'][username] = {
|
||||
'password': self.config['hash_password'](password),
|
||||
'created_at': datetime.datetime.now().isoformat()
|
||||
# 创建用户
|
||||
user_data = {
|
||||
'username': username,
|
||||
'password': self.user_manager.hash_password(password),
|
||||
'devices': [],
|
||||
'created_at': datetime.datetime.now().isoformat(),
|
||||
'last_login': ''
|
||||
}
|
||||
self.config['save_user_data']()
|
||||
await self.user_manager.add_user(username, user_data)
|
||||
|
||||
logger.info(f"Successfully registered new user {username} from {request.remote}")
|
||||
return web.json_response({
|
||||
@@ -60,7 +48,7 @@ class RegisterHandler:
|
||||
})
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Registration error: {str(e)}", exc_info=True)
|
||||
logger.error(f"Register error: {str(e)}", exc_info=True)
|
||||
return web.json_response({
|
||||
'success': False,
|
||||
'message': '注册失败,请稍后重试'
|
||||
|
||||
Reference in New Issue
Block a user