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>
4.9 KiB
4.9 KiB
用户注册功能实现说明
功能概述
已成功为博客系统添加用户自主注册功能,并在后台站点设置中增加了注册开关。
实现的功能
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- 功能说明
使用流程
管理员开启注册功能
- 以管理员身份登录
- 访问
/admin/settings/site - 勾选"允许用户注册"复选框
- 点击"保存"按钮
用户注册流程
- 访问
/login登录页面 - 点击底部"注册"链接(仅当注册功能开启时显示)
- 填写注册表单
- 提交后自动登录并跳转到首页
安全特性
- 密码使用 bcrypt 加密存储
- 用户名唯一性验证
- 表单前端和后端双重验证
- 注册功能默认关闭,需管理员手动开启
数据库迁移
GORM会自动迁移数据库结构,添加 allow_registration 字段到 site_settings 表。
首次启动应用时会自动完成迁移,无需手动操作。
测试要点
-
后台设置测试
- 验证默认状态为关闭
- 验证开关保存成功
- 验证开关状态同步到登录页面
-
注册功能测试
- 功能关闭时访问
/register应重定向 - 功能开启时注册页面正常显示
- 表单验证正确工作
- 用户名重复时显示错误
- 注册成功后自动登录
- 功能关闭时访问
-
国际化测试
- 中文界面显示正常
- 英文界面显示正常
- 错误消息本地化正确
注意事项
- 注册功能默认关闭,确保系统安全
- 注册用户默认为
author角色,不是admin - 管理员账号仍需通过后台用户管理创建
- 邮箱字段为可选,方便后续扩展邮件功能