# 用户注册功能实现说明 ## 功能概述 已成功为博客系统添加用户自主注册功能,并在后台站点设置中增加了注册开关。 ## 实现的功能 ### 1. 后台设置 - 注册开关 - **位置**: `/admin/settings/site` (站点设置页面) - **功能**: 管理员可以控制是否允许访客自主注册 - **默认值**: 关闭(`AllowRegistration = false`) - **说明**: 只有管理员可以通过后台开关控制注册功能 ### 2. 注册页面 - **路径**: `/register` - **访问控制**: - 仅当后台开启注册功能时可访问 - 如果注册功能关闭,访问会重定向到登录页面 - **表单字段**: - 用户名(必填,3-32字符) - 显示名称(可选,默认使用用户名) - 邮箱(可选,用于Gravatar头像) - 密码(必填,至少6字符) - 确认密码(必填) ### 3. 注册验证 - 用户名长度验证(3-32字符) - 密码长度验证(至少6字符) - 密码确认匹配验证 - 用户名唯一性检查 - 注册成功后自动登录并跳转到首页 ### 4. 登录页面增强 - 当注册功能开启时,登录页面底部显示"还没有账号?注册"链接 - 当注册功能关闭时,该链接不显示 ### 5. 用户角色 - 通过注册创建的用户默认角色为 `author`(作者) - 默认状态为 `normal`(正常) ## 文件修改清单 ### 1. 数据库模型 - **文件**: `models/site_setting.go` - **修改**: 添加 `AllowRegistration` 字段(bool类型,默认false) ### 2. 后台设置页面 - **文件**: `templates/admin/settings_site.html` - **修改**: 添加"允许用户注册"复选框 ### 3. 后台设置处理器 - **文件**: `handlers/settings.go` - **修改**: 在保存站点设置时处理 `allow_registration` 参数 ### 4. 认证处理器 - **文件**: `handlers/auth.go` - **修改**: - 添加 `RegisterPage()` 函数 - 渲染注册页面 - 添加 `Register()` 函数 - 处理注册表单提交 - 修改 `LoginPage()` 函数 - 传递注册开关状态到模板 - 添加 `strings` 包导入 ### 5. 注册页面模板 - **文件**: `templates/pages/register.html` (新建) - **内容**: 完整的注册表单页面 ### 6. 登录页面模板 - **文件**: `templates/pages/login.html` - **修改**: 添加注册链接(条件显示) ### 7. 路由配置 - **文件**: `main.go` - **修改**: 添加注册路由 - `GET /register` - 注册页面 - `POST /register` - 注册表单提交 ### 8. 国际化文本 - **文件**: `i18n/i18n.go` - **修改**: 添加中英文注册相关翻译文本(约30个新键值对) ## 翻译键名 ### 注册页面相关 - `page_register` - 页面标题 - `register_title` - 表单标题 - `register_username` - 用户名标签 - `register_display_name` - 显示名称标签 - `register_email` - 邮箱标签 - `register_password` - 密码标签 - `register_confirm_password` - 确认密码标签 - `register_submit` - 提交按钮 - `register_have_account` - "已有账号?"提示 - `register_login_link` - "登录"链接文字 ### 错误消息 - `register_required` - 必填字段错误 - `register_username_length` - 用户名长度错误 - `register_password_length` - 密码长度错误 - `register_password_mismatch` - 密码不匹配错误 - `register_error` - 通用注册错误 - `user_username_exists` - 用户名已存在错误 ### 登录页面 - `login_no_account` - "还没有账号?" - `login_register_link` - "注册"链接 ### 后台设置 - `settings_allow_registration` - "允许用户注册" - `settings_allow_registration_hint` - 功能说明 ## 使用流程 ### 管理员开启注册功能 1. 以管理员身份登录 2. 访问 `/admin/settings/site` 3. 勾选"允许用户注册"复选框 4. 点击"保存"按钮 ### 用户注册流程 1. 访问 `/login` 登录页面 2. 点击底部"注册"链接(仅当注册功能开启时显示) 3. 填写注册表单 4. 提交后自动登录并跳转到首页 ### 安全特性 - 密码使用 bcrypt 加密存储 - 用户名唯一性验证 - 表单前端和后端双重验证 - 注册功能默认关闭,需管理员手动开启 ## 数据库迁移 GORM会自动迁移数据库结构,添加 `allow_registration` 字段到 `site_settings` 表。 首次启动应用时会自动完成迁移,无需手动操作。 ## 测试要点 1. **后台设置测试** - 验证默认状态为关闭 - 验证开关保存成功 - 验证开关状态同步到登录页面 2. **注册功能测试** - 功能关闭时访问 `/register` 应重定向 - 功能开启时注册页面正常显示 - 表单验证正确工作 - 用户名重复时显示错误 - 注册成功后自动登录 3. **国际化测试** - 中文界面显示正常 - 英文界面显示正常 - 错误消息本地化正确 ## 注意事项 1. 注册功能默认关闭,确保系统安全 2. 注册用户默认为 `author` 角色,不是 `admin` 3. 管理员账号仍需通过后台用户管理创建 4. 邮箱字段为可选,方便后续扩展邮件功能