From fb2eff5f235163cc499d5da9622ef342185e5158 Mon Sep 17 00:00:00 2001 From: Victor_Jay Date: Sat, 30 May 2026 20:38:55 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B3=A8=E5=86=8C=E5=85=B3=E9=97=AD?= =?UTF-8?q?=E6=97=B6=E9=A1=B5=E9=9D=A2=E9=9A=90=E8=97=8F=E8=A1=A8=E5=8D=95?= =?UTF-8?q?=E5=B9=B6=E6=98=BE=E7=A4=BA=E5=8F=8B=E5=A5=BD=E6=8F=90=E7=A4=BA?= =?UTF-8?q?=EF=BC=8C=E4=BF=9D=E7=95=99=E7=99=BB=E5=BD=95=E5=85=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - RegisterPage 传入 RegistrationEnabled 标志到模板 - 注册关闭时隐藏输入框和按钮,显示“当前暂不开放注册”提示 - 保留“已有账号?立即登录”链接 - API 层已有拦截(AuthService.Register 返回 403),无需修改 - authUseCase 接口新增 IsRegistrationEnabled 方法(ISP) --- internal/controller/auth_controller.go | 9 +++++---- internal/controller/interfaces.go | 3 ++- internal/service/auth_service.go | 5 +++++ .../MetaLab-2026/html/auth/register.html | 7 +++++++ templates/MetaLab-2026/static/css/auth.css | 19 +++++++++++++++++++ 5 files changed, 38 insertions(+), 5 deletions(-) diff --git a/internal/controller/auth_controller.go b/internal/controller/auth_controller.go index fe1b7c7..6b6244e 100644 --- a/internal/controller/auth_controller.go +++ b/internal/controller/auth_controller.go @@ -23,7 +23,7 @@ func NewAuthController(authService authUseCase, tokenSvc tokenRefresher, limiter return &AuthController{authService: authService, tokenService: tokenSvc, rateLimiter: limiter, cfg: cfg} } -// RegisterPage 注册页面(已登录用户重定向到首页,注册关闭时重定向到登录页) +// RegisterPage 注册页面(已登录用户重定向到首页) func (ac *AuthController) RegisterPage(c *gin.Context) { if _, exists := c.Get("uid"); exists { c.Redirect(http.StatusFound, "/") @@ -35,9 +35,10 @@ func (ac *AuthController) RegisterPage(c *gin.Context) { return } c.HTML(http.StatusOK, "auth/register.html", common.BuildPageData(c, gin.H{ - "Title": "注册", - "ExtraCSS": "/static/css/auth.css", - "Guidelines": guidelines, + "Title": "注册", + "ExtraCSS": "/static/css/auth.css", + "Guidelines": guidelines, + "RegistrationEnabled": ac.authService.IsRegistrationEnabled(), })) } diff --git a/internal/controller/interfaces.go b/internal/controller/interfaces.go index c9fcbce..00854fc 100644 --- a/internal/controller/interfaces.go +++ b/internal/controller/interfaces.go @@ -6,12 +6,13 @@ import ( "metazone.cc/metalab/internal/service" ) -// authUseCase AuthController 对 AuthService 的最小依赖(ISP:4 个方法) +// authUseCase AuthController 对 AuthService 的最小依赖(ISP:5 个方法) type authUseCase interface { Register(req model.RegisterRequest, regIP string) (string, string, *model.User, error) Login(req model.LoginRequest, loginIP string) (string, string, *model.User, error) ConfirmRestore(req model.LoginRequest, loginIP string) (string, string, *model.User, error) CheckEmail(email string) (bool, error) + IsRegistrationEnabled() bool } // tokenRefresher AuthController 对 TokenService 的最小依赖(ISP:1 个方法) diff --git a/internal/service/auth_service.go b/internal/service/auth_service.go index a1e9af9..4c0179a 100644 --- a/internal/service/auth_service.go +++ b/internal/service/auth_service.go @@ -52,6 +52,11 @@ func validatePassword(pw string) error { return nil } +// IsRegistrationEnabled 检查是否允许新用户注册 +func (s *AuthService) IsRegistrationEnabled() bool { + return s.siteSettings.IsRegistrationEnabled() +} + // Register 注册 // 流程:密码强度 → 邮箱查重 → 哈希 → 生成唯一用户名 → 创建 → access JWT + refresh JWT // rememberMe=true: refresh Cookie 持久化(30天);false: session cookie(关浏览器即清除) diff --git a/templates/MetaLab-2026/html/auth/register.html b/templates/MetaLab-2026/html/auth/register.html index 00ccd23..64e0bc5 100644 --- a/templates/MetaLab-2026/html/auth/register.html +++ b/templates/MetaLab-2026/html/auth/register.html @@ -7,6 +7,7 @@

创建账号

加入 MetaLab 开发者社区

+ {{if .RegistrationEnabled}}
@@ -34,6 +35,12 @@ + {{else}} +
+

当前暂不开放注册,敬请期待

+

社区正在维护中,请稍后再来

+
+ {{end}} diff --git a/templates/MetaLab-2026/static/css/auth.css b/templates/MetaLab-2026/static/css/auth.css index 2cd8db4..daa1c21 100644 --- a/templates/MetaLab-2026/static/css/auth.css +++ b/templates/MetaLab-2026/static/css/auth.css @@ -36,6 +36,25 @@ margin-bottom: 2rem; } +/* ---------- Registration Closed Notice ---------- */ +.registration-closed { + text-align: center; + padding: 2.5rem 1rem; + margin-bottom: .5rem; +} + +.registration-closed .closed-message { + font-size: 1.05rem; + font-weight: 600; + color: var(--color-primary); + margin-bottom: .5rem; +} + +.registration-closed .closed-subtitle { + font-size: .9rem; + color: var(--color-secondary); +} + /* ---------- Form ---------- */ .form-group { margin-bottom: 1.2rem;