user_controller使用通用token逻辑

This commit is contained in:
2025-09-12 13:11:04 +08:00
parent 9f72c30e8b
commit e07017b3fc
5 changed files with 16 additions and 33 deletions

View File

@@ -2,31 +2,29 @@ package user
import (
"net/http"
"time"
"git.huangwc.com/pig/pig-farm-controller/internal/app/controller"
"git.huangwc.com/pig/pig-farm-controller/internal/app/service/token"
"git.huangwc.com/pig/pig-farm-controller/internal/infra/logs"
"git.huangwc.com/pig/pig-farm-controller/internal/infra/models"
"git.huangwc.com/pig/pig-farm-controller/internal/infra/repository"
"github.com/gin-gonic/gin"
"github.com/golang-jwt/jwt/v5"
"gorm.io/gorm"
)
// jwtSecret 是用于签名 JWT 的密钥。在生产环境中,这应该从环境变量或安全配置中读取。
var jwtSecret = []byte("your_super_secret_jwt_key")
// Controller 用户控制器
type Controller struct {
userRepo repository.UserRepository
logger *logs.Logger
userRepo repository.UserRepository
logger *logs.Logger
tokenService token.TokenService // 注入 token 服务
}
// NewController 创建用户控制器实例
func NewController(userRepo repository.UserRepository, logger *logs.Logger) *Controller {
func NewController(userRepo repository.UserRepository, logger *logs.Logger, tokenService token.TokenService) *Controller {
return &Controller{
userRepo: userRepo,
logger: logger,
userRepo: userRepo,
logger: logger,
tokenService: tokenService,
}
}
@@ -55,24 +53,6 @@ type LoginResponse struct {
Token string `json:"token"`
}
// generateToken 为给定用户生成 JWT
func generateToken(userID uint, username string) (string, error) {
expirationTime := time.Now().Add(24 * time.Hour) // Token 24 小时后过期
claims := jwt.MapClaims{
"user_id": userID,
"username": username,
"exp": expirationTime.Unix(),
}
token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
tokenString, err := token.SignedString(jwtSecret)
if err != nil {
return "", err
}
return tokenString, nil
}
// CreateUser 处理创建用户的请求
func (c *Controller) CreateUser(ctx *gin.Context) {
var req CreateUserRequest
@@ -134,7 +114,7 @@ func (c *Controller) Login(ctx *gin.Context) {
}
// 登录成功,生成 JWT token
tokenString, err := generateToken(user.ID, user.Username)
tokenString, err := c.tokenService.GenerateToken(user.ID)
if err != nil {
c.logger.Errorf("Login: 生成 token 失败: %v", err)
controller.SendErrorResponse(ctx, http.StatusInternalServerError, "登录失败,无法生成认证信息")