Files
xiaozhi-esp32-server/manager/api/login.py
T

53 lines
1.9 KiB
Python

import logging
from aiohttp import web
import datetime
logger = logging.getLogger(__name__)
class LoginHandler:
def __init__(self, user_manager, session_manager):
self.user_manager = user_manager
self.session_manager = session_manager
async def handle_login(self, request):
"""处理登录请求"""
try:
data = await request.json()
username = data.get('username')
password = data.get('password')
if not username or not password:
logger.warning(f"Login attempt with empty credentials from {request.remote}")
return web.json_response({
'success': False,
'message': '用户名和密码不能为空'
})
stored_user = await self.user_manager.get_user(username)
if not stored_user or stored_user['password'] != self.user_manager.hash_password(password):
logger.warning(f"Failed login attempt for user {username} from {request.remote}")
return web.json_response({
'success': False,
'message': '用户名或密码错误'
})
# 更新最后登录时间
await self.user_manager.update_user(username, {
'last_login': datetime.datetime.now().isoformat()
})
# 创建会话并返回session_id
session_id = self.session_manager.create_session(username)
return web.json_response({
'success': True,
'message': '登录成功',
'session_id': session_id
})
except Exception as e:
logger.error(f"Login error: {str(e)}", exc_info=True)
return web.json_response({
'success': False,
'message': '登录失败,请稍后重试'
})