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:
@@ -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. 邮箱字段为可选,方便后续扩展邮件功能
|
||||
Reference in New Issue
Block a user