Files
go_blog/REGISTRATION_FEATURE.md
T
kevinandClaude Fable 5 d9bb91af00 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>
2026-06-22 21:01:38 +08:00

162 lines
4.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 用户注册功能实现说明
## 功能概述
已成功为博客系统添加用户自主注册功能,并在后台站点设置中增加了注册开关。
## 实现的功能
### 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. 邮箱字段为可选,方便后续扩展邮件功能