Compare commits

...

4 Commits

Binary file not shown.

@ -6,7 +6,9 @@ import json
import os
import random
import re
import time
import smtplib
from datetime import datetime, timedelta
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from typing import Dict, List, Tuple, Optional
@ -23,6 +25,8 @@ class DataManager:
self.sender_config = DEFAULT_SENDER_CONFIG
self.ensure_data_files()
self.load_email_config()
self.verification_code_expiry = 0.2
def ensure_data_files(self):
"""确保数据文件存在"""
@ -64,9 +68,7 @@ class DataManager:
if (self.sender_config["email"] == "your_email@qq.com" or
self.sender_config["password"] == "your_app_password"):
print("请先配置发送邮箱信息")
# 在没有配置邮箱的情况下,返回验证码供测试使用
print(f"测试模式 - 验证码: {verification_code}")
return True
return False
# 获取SMTP配置
smtp_config = get_smtp_config(self.sender_config["email"])
@ -104,16 +106,21 @@ class DataManager:
return True
except Exception as e:
print(f"邮件发送失败: {e}")
# 测试模式:如果邮件发送失败,在控制台显示验证码
print(f"测试模式 - 验证码: {verification_code}")
return True # 返回True以便测试
return False # 返回True以便测试
def register_user(self, email: str, username: str) -> bool:
"""用户注册,发送验证码到邮箱"""
users = self.load_users()
if email in users:
raise ValueError("该邮箱已注册")
existing_user = users[email]
# 判断是否为未完成注册状态
if not existing_user.get("verified") or existing_user.get("password") is None:
del users[email] # 删除未完成的记录
else:
raise ValueError("该邮箱已注册") # 已完成注册则提示
# 检查用户名是否已存在
for user_data in users.values():
@ -126,11 +133,13 @@ class DataManager:
if not self.send_verification_email(email, verification_code):
raise ValueError("验证码邮件发送失败,请检查邮箱地址")
code_generated_time = datetime.now().timestamp()
users[email] = {
"username": username,
"verification_code": verification_code,
"verified": False,
"password": None
"password": None,
"code_generated_time": code_generated_time
}
self.save_users(users)
@ -143,11 +152,24 @@ class DataManager:
if email not in users:
return False
if users[email]["verification_code"] == code:
users[email]["verified"] = True
user = users[email]
current_time = datetime.now().timestamp()
time_diff = current_time - user.get("code_generated_time", 0)
if time_diff > self.verification_code_expiry * 60:
# 验证码过期,删除无效记录
del users[email]
self.save_users(users)
return False
if user["verification_code"] == code:
user["verified"] = True
self.save_users(users)
return True
return False
def validate_password(self, password: str) -> bool:
@ -161,17 +183,24 @@ class DataManager:
return has_upper and has_lower and has_digit
def set_password(self, email: str, password: str) -> bool:
"""设置用户密码"""
if not self.validate_password(password):
users = self.load_users()
if email in users and users[email]["verified"]:
del users[email]
self.save_users(users)
return False
users = self.load_users()
if email not in users or not users[email]["verified"]:
return False
users[email]["password"] = password
self.save_users(users)
return True
def login(self, email: str, password: str) -> bool:
@ -182,6 +211,20 @@ class DataManager:
return False
user = users[email]
# 新增:如果用户已验证但未设置密码,清理记录
if user["verified"] and user["password"] is None:
del users[email]
self.save_users(users)
return False
# 检查验证码是否过期(针对未验证用户)
current_time = datetime.now().timestamp()
time_diff = current_time - user.get("code_generated_time", 0)
if time_diff > self.verification_code_expiry * 60:
del users[email]
self.save_users(users)
return False
if user["verified"] and user["password"] == password:
self.current_user = email
return True

@ -0,0 +1,5 @@
{
"email": "1505557421@qq.com",
"password": "eujjusgbkootgdfd",
"name": "数学学习软件"
}
Loading…
Cancel
Save