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

4.9 KiB
Raw Blame History

用户注册功能实现说明

功能概述

已成功为博客系统添加用户自主注册功能,并在后台站点设置中增加了注册开关。

实现的功能

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. 邮箱字段为可选,方便后续扩展邮件功能