feat: add navigation links management and user registration

Features:
- Custom navigation links management in admin settings
- Multi-language support for navigation links (Chinese/English)
- Control link behavior (open in new window)
- Sort order and enable/disable toggle for nav links
- User registration system with validation
- Admin can enable/disable user registration
- Registration form with username, display name, email, password
- Link to registration from login page

Navigation Links:
- Admin interface to add/edit/delete custom nav links
- Support for both internal and external URLs
- Display links in header navigation bar
- Respects language preference

User Registration:
- Username validation (3-32 characters, alphanumeric + underscore/dash)
- Password validation (minimum 6 characters)
- Password confirmation matching
- Optional display name and email fields
- Can be toggled on/off by admin in site settings

Templates:
- Added navigation links settings page
- Added user registration page
- Updated login page with registration link
- Updated base layout to render custom nav links

Documentation:
- NAV_LINKS_FEATURE.md - Navigation links feature documentation
- REGISTRATION_FEATURE.md - User registration documentation
- IMPLEMENTATION_SUMMARY.md - Overall implementation summary

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-06-22 21:01:38 +08:00
co-authored by Claude Fable 5
parent 2bdc368399
commit d9bb91af00
18 changed files with 1224 additions and 15 deletions
+161
View File
@@ -0,0 +1,161 @@
# 用户注册功能实现说明
## 功能概述
已成功为博客系统添加用户自主注册功能,并在后台站点设置中增加了注册开关。
## 实现的功能
### 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. 邮箱字段为可选,方便后续扩展邮件功能