菜单

用户模型和认证

相关源文件

本文档涵盖了 Gitea 的用户模型架构、认证机制和账户管理。有关与外部认证源集成的说明,请参阅 认证源。有关 API 令牌和应用程序凭据的说明,请参阅 安全与授权

用户模型概述

User 模型是 Gitea 中的核心实体,代表个人用户和组织。它包含用户凭据、个人资料信息、权限和偏好设置。

用户类型

Gitea 支持代码库中定义的各种用户类型

类型描述
UserTypeIndividual普通人类用户
UserTypeOrganization具有成员的组织账户
UserTypeBot用于 CI/CD 和其他任务的自动化账户
UserTypeReserved*为防止垃圾邮件而保留的名称
UserTypeRemoteUser来自外部实例的联合用户

来源: models/user/user.go44-65

用户模型架构

User 结构包含多个字段以存储与用户相关的信息

来源: models/user/user.go78-152

认证系统架构

Gitea 的认证系统支持多种认证方法和流程。认证主要通过 routers/web/auth 包中的模块进行管理。

来源: routers/web/auth/auth.go models/user/user.go

密码管理

密码存储

密码使用以下方式安全存储:

  1. 加密安全的盐(16 字节,编码为 32 个字符的十六进制字符串)
  2. 可配置的哈希算法(默认为 Argon2)
  3. 算法名称、哈希和盐存储在单独的字段中

密码验证过程

来源: models/user/user.go370-385 models/user/user.go383-385

密码要求

Gitea 强制执行密码要求,包括:

  1. 最小长度(可在设置中配置)
  2. 复杂度要求(大写字母、小写字母、数字、符号)
  3. 可选的 pwned 密码检查(与 haveibeenpwned.com API 对比)

密码验证在以下阶段进行:

  • 账户创建
  • 密码更改
  • 管理员用户管理

来源: routers/web/auth/auth.go483-503 routers/web/user/setting/account.go54-99

认证流程

本地认证流程

来源: routers/web/auth/auth.go183-295

OAuth2 认证流程

来源: routers/web/auth/oauth.go36-216

自动登录“记住我”

当用户在登录时勾选“记住我”时,Gitea 会创建一个持久化的认证令牌

  1. 生成一个安全的令牌并存储在 auth_token 表中
  2. 令牌 ID 和哈希被设置为 Cookie
  3. 后续访问时,autoSignIn() 函数会验证此令牌
  4. 令牌具有可配置的有效期(默认值:登录记住我的天数设置)

来源: routers/web/auth/auth.go47-106 routers/web/auth/auth.go297-312

用户管理

用户创建

用户可以通过以下方式创建:

  • 自助注册
  • 管理员创建
  • OAuth 自动注册(如果启用)

来源: models/user/user.go644-802 routers/web/auth/auth.go447-527 routers/web/admin/users.go84-213

邮箱管理

用户可以拥有多个与账户关联的邮箱地址

  1. 一个邮箱被指定为主邮箱(用于通知和 Git 提交)
  2. 邮箱在使用前必须经过验证(激活邮件)
  3. 用户可以控制通知偏好设置

邮件通知偏好

  • enabled:所有通知,不包括自己的操作
  • onmention:仅在被提及
  • disabled:无邮件通知
  • andyourown:所有通知,包括自己的操作

来源: models/user/email_address.go templates/user/settings/account.tmpl44-68

管理界面

管理员拥有额外的用户管理能力

  1. 查看和搜索所有用户 routers/web/admin/users.go44-80
  2. 创建用户并附加选项 routers/web/admin/users.go84-213
  3. 编辑用户详细信息和权限 routers/web/admin/users.go321-456
  4. 删除和清理用户 routers/web/admin/users.go483-521
  5. 管理用户的认证设置 routers/web/admin/users.go244-257

管理员编辑用户界面包含以下主要功能

来源: templates/admin/user/edit.tmpl routers/web/admin/users.go

与其他子系统的集成

用户模型集成了 Gitea 中的各种其他系统

  1. 代码仓库系统:用户可以拥有代码仓库并为之贡献
  2. 组织系统:用户可以成为组织的成员
  3. 问题跟踪:用户创建问题并被分配到问题
  4. 拉取请求:用户提交并评审更改
  5. 访问控制:用户权限决定了允许的操作

这些集成对于 Gitea 作为 Git 代码仓库托管平台的功能至关重要。

来源: models/user/user.go services/user/user.go