feat: 添加 OAuth 认证支持及相关改进

- 新增 OAuth 模块,支持 LinuxDo/GitHub/Google 等第三方登录
- 用户邮箱改为可选字段,支持无邮箱注册
- 新增模块配置验证状态 (config_validated/config_error)
- 系统设置界面改为分块独立保存
- 用户设置新增 OAuth 绑定管理和首次密码设置
- 登录界面支持 OAuth 按钮展示
- 邮箱验证设置移至邮件设置页面
This commit is contained in:
fawney19
2026-01-19 03:19:17 +08:00
parent e2e14fd09c
commit 3d88dfd98a
61 changed files with 4548 additions and 950 deletions

View File

@@ -126,9 +126,11 @@ class UserCacheService:
return {
"id": user.id,
"email": user.email,
"email_verified": user.email_verified,
"username": user.username,
"role": user.role.value if user.role else None,
"is_active": user.is_active,
"auth_source": user.auth_source.value if user.auth_source else None,
"quota_usd": float(user.quota_usd) if user.quota_usd is not None else None,
"used_usd": float(user.used_usd),
"created_at": user.created_at.isoformat() if user.created_at else None,
@@ -146,11 +148,13 @@ class UserCacheService:
"""
from datetime import datetime
from src.core.enums import AuthSource
from src.models.database import UserRole
user = User(
id=user_dict["id"],
email=user_dict["email"],
email=user_dict.get("email"),
email_verified=user_dict.get("email_verified", False),
username=user_dict["username"],
is_active=user_dict["is_active"],
used_usd=user_dict["used_usd"],
@@ -160,6 +164,9 @@ class UserCacheService:
if user_dict.get("role"):
user.role = UserRole(user_dict["role"])
if user_dict.get("auth_source"):
user.auth_source = AuthSource(user_dict["auth_source"])
if user_dict.get("quota_usd") is not None:
user.quota_usd = user_dict["quota_usd"]