import bcrypt import random import string from datetime import datetime, timedelta def hash_password(password: str) -> str: """加密密码""" salt = bcrypt.gensalt() return bcrypt.hashpw(password.encode('utf-8'), salt).decode('utf-8') def verify_password(password: str, hashed: str) -> bool: """验证密码""" return bcrypt.checkpw(password.encode('utf-8'), hashed.encode('utf-8')) def generate_verification_code(length: int = 6) -> str: """生成验证码""" return ''.join(random.choices(string.digits, k=length)) def get_client_ip(request): """获取客户端IP""" if request.headers.get('X-Forwarded-For'): return request.headers.get('X-Forwarded-For').split(',')[0] return request.remote_addr