Files
lv8girl/internal/services/auth.go
nannanwu 690b4d5961 fix(admin): 添加管理操作错误处理及更新模板样式
- 管理后台帖子与用户审核操作中添加失败错误重定向处理
- 管理后台帖子、用户、评论删除操作中添加错误检查及提示
- 用户角色更新操作失败时添加错误重定向
- 用户封禁通知失败时添加相应错误提示
- 登录登出时session保存加入错误处理
- 讨论区上传目录创建失败时显示错误提示
- 移除admin_dashboard.html多余样式及修正侧边栏当前页高亮
- admin_posts.html和admin_users.html添加状态样式动态使用的隐藏span元素
- admin_users.html为角色选择添加label以提升无障碍性
- 升级项目依赖版本,包含gin、gorm、validator等核心库版本更新
2026-02-24 21:14:55 +08:00

88 lines
2.3 KiB
Go

package services
import (
"lv8girl/internal/models"
"lv8girl/internal/repositories"
)
type AuthService struct {
userRepo *repositories.UserRepository
}
func NewAuthService() *AuthService {
return &AuthService{
userRepo: repositories.NewUserRepository(),
}
}
type LoginResult struct {
Success bool
User *models.User
Error string
}
func (s *AuthService) Login(login, password string) LoginResult {
user, err := s.userRepo.FindByUsernameOrEmail(login)
if err != nil {
return LoginResult{Success: false, Error: "用户名/邮箱或密码错误"}
}
if !s.userRepo.CheckPassword(password, user.PasswordHash) {
return LoginResult{Success: false, Error: "用户名/邮箱或密码错误"}
}
switch user.Status {
case "pending":
return LoginResult{Success: false, Error: "您的账号正在等待管理员审核,请耐心等待。"}
case "rejected":
return LoginResult{Success: false, Error: "您的账号审核未通过,无法登录。如有疑问,请联系管理员。"}
case "approved":
if user.Role == "banned" {
return LoginResult{Success: false, Error: "您的账号已被封禁,请联系管理员"}
}
default:
return LoginResult{Success: false, Error: "账号状态异常,请联系管理员"}
}
_ = s.userRepo.UpdateLastActive(user.ID)
return LoginResult{Success: true, User: user}
}
type RegisterResult struct {
Success bool
Error string
}
func (s *AuthService) Register(username, email, password string) RegisterResult {
if len(username) < 3 || len(username) > 20 {
return RegisterResult{Success: false, Error: "用户名长度必须在3-20个字符之间"}
}
if s.userRepo.ExistsByUsernameOrEmail(username, email) {
return RegisterResult{Success: false, Error: "用户名或邮箱已被注册"}
}
passwordHash, err := s.userRepo.HashPassword(password)
if err != nil {
return RegisterResult{Success: false, Error: "注册失败,请稍后重试"}
}
user := &models.User{
Username: username,
Email: email,
PasswordHash: passwordHash,
Role: "user",
Status: "pending",
}
if err := s.userRepo.Create(user); err != nil {
return RegisterResult{Success: false, Error: "注册失败,请稍后重试"}
}
return RegisterResult{Success: true}
}
func (s *AuthService) InitAdmin() error {
return s.userRepo.CreateAdminIfNotExists()
}