- 管理后台帖子与用户审核操作中添加失败错误重定向处理 - 管理后台帖子、用户、评论删除操作中添加错误检查及提示 - 用户角色更新操作失败时添加错误重定向 - 用户封禁通知失败时添加相应错误提示 - 登录登出时session保存加入错误处理 - 讨论区上传目录创建失败时显示错误提示 - 移除admin_dashboard.html多余样式及修正侧边栏当前页高亮 - admin_posts.html和admin_users.html添加状态样式动态使用的隐藏span元素 - admin_users.html为角色选择添加label以提升无障碍性 - 升级项目依赖版本,包含gin、gorm、validator等核心库版本更新
88 lines
2.3 KiB
Go
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()
|
|
}
|