Files
SeeyonFileSystem/server/controller/auth_controller.go

148 lines
3.4 KiB
Go
Raw Normal View History

2026-07-03 15:58:29 +08:00
// Package controller 提供HTTP请求处理层
// 负责参数绑定、校验, 调用Service层, 返回响应
package controller
import (
"seeyon-filesystem/dto"
"seeyon-filesystem/middleware"
"seeyon-filesystem/service"
"seeyon-filesystem/utils"
"github.com/gin-gonic/gin"
)
// AuthController 认证控制器
type AuthController struct {
authService *service.AuthService
}
// NewAuthController 创建认证控制器实例
func NewAuthController() *AuthController {
return &AuthController{
authService: service.NewAuthService(),
}
}
// Login 用户登录
// POST /api/auth/login
func (c *AuthController) Login(ctx *gin.Context) {
var req dto.LoginRequest
if err := ctx.ShouldBindJSON(&req); err != nil {
utils.BadRequest(ctx, "参数错误: "+err.Error())
return
}
resp, err := c.authService.Login(&req)
if err != nil {
utils.Unauthorized(ctx, err.Error())
return
}
utils.Success(ctx, resp)
}
2026-07-10 17:33:33 +08:00
// AppLogin 应用登录(用户名+appId)
// POST /api/auth/app-login
func (c *AuthController) AppLogin(ctx *gin.Context) {
var req dto.AppLoginRequest
if err := ctx.ShouldBindJSON(&req); err != nil {
utils.BadRequest(ctx, "参数错误: "+err.Error())
return
}
resp, err := c.authService.AppLogin(&req)
if err != nil {
utils.Unauthorized(ctx, err.Error())
return
}
utils.Success(ctx, resp)
}
2026-07-03 15:58:29 +08:00
// Register 用户注册
// POST /api/auth/register
func (c *AuthController) Register(ctx *gin.Context) {
var req dto.RegisterRequest
if err := ctx.ShouldBindJSON(&req); err != nil {
utils.BadRequest(ctx, "参数错误: "+err.Error())
return
}
if err := c.authService.Register(&req); err != nil {
utils.BadRequest(ctx, err.Error())
return
}
utils.SuccessWithMessage(ctx, "注册成功", nil)
}
// GetProfile 获取当前用户信息
// GET /api/auth/profile
func (c *AuthController) GetProfile(ctx *gin.Context) {
userID := middleware.GetCurrentUserID(ctx)
if userID == 0 {
utils.Unauthorized(ctx, "未登录")
return
}
role, _ := ctx.Get("role")
utils.Success(ctx, gin.H{
"user_id": userID,
"username": middleware.GetCurrentUsername(ctx),
"role": role,
})
}
// ChangePassword 修改密码
// PUT /api/auth/password
func (c *AuthController) ChangePassword(ctx *gin.Context) {
userID := middleware.GetCurrentUserID(ctx)
if userID == 0 {
utils.Unauthorized(ctx, "未登录")
return
}
var req dto.ChangePasswordRequest
if err := ctx.ShouldBindJSON(&req); err != nil {
utils.BadRequest(ctx, "参数错误: "+err.Error())
return
}
if err := c.authService.ChangePassword(userID, &req); err != nil {
utils.BadRequest(ctx, err.Error())
return
}
utils.SuccessWithMessage(ctx, "密码修改成功", nil)
}
2026-07-18 10:52:32 +08:00
// Logout 退出登录
// POST /api/auth/logout
func (c *AuthController) Logout(ctx *gin.Context) {
userID := middleware.GetCurrentUserID(ctx)
token := ctx.GetHeader("token")
if token == "" {
authHeader := ctx.GetHeader("Authorization")
if len(authHeader) > 7 && authHeader[:7] == "Bearer " {
token = authHeader[7:]
}
}
if userID > 0 && token != "" {
c.authService.Logout(userID, token)
}
utils.SuccessWithMessage(ctx, "已退出登录", nil)
}
// GetSessions 获取当前用户的登录会话列表
// GET /api/auth/sessions
func (c *AuthController) GetSessions(ctx *gin.Context) {
userID := middleware.GetCurrentUserID(ctx)
if userID == 0 {
utils.Unauthorized(ctx, "未登录")
return
}
sessions := c.authService.GetSessions(userID)
utils.Success(ctx, sessions)
}