golang-yitisheng-server/server/modules/system/controller/sys_auth_controller.go

87 lines
2.1 KiB
Go

// Package controller 控制器层
package controller
import (
"server/common"
"server/modules/system/service"
"github.com/gin-gonic/gin"
)
// LoginRequest 登录请求
type LoginRequest struct {
Username string `json:"username" binding:"required"`
Password string `json:"password" binding:"required"`
}
// AuthController 认证控制器
type AuthController struct {
userService *service.SysUserService
}
func NewAuthController() *AuthController {
return &AuthController{userService: service.NewSysUserService()}
}
func (ctrl *AuthController) RegisterRoutes(r *gin.RouterGroup) {
r.POST("/sys/auth/login", ctrl.SysLogin)
r.POST("/sys/auth/logout", ctrl.Logout)
r.GET("/sys/auth/info", ctrl.GetUserInfo)
}
// SysLogin 用户登录
// @Summary Sys用户登录
// @Tags 认证
// @Accept json
// @Produce json
// @Param request body LoginRequest true "登录信息"
// @Success 200 {object} common.Response
// @Router /sys/auth/login [post]
func (ctrl *AuthController) SysLogin(c *gin.Context) {
var req LoginRequest
if err := c.ShouldBindJSON(&req); err != nil {
common.Error(c, 400, "用户名和密码不能为空")
return
}
loginUser, token, err := ctrl.userService.SysLogin(req.Username, req.Password)
if err != nil {
common.Error(c, 401, err.Error())
return
}
common.Success(c, gin.H{
"token": token,
"user": loginUser,
})
}
// Logout 用户登出
// @Summary Sys用户登出
// @Tags 认证
// @Success 200 {object} common.Response
// @Router /sys/auth/logout [post]
func (ctrl *AuthController) Logout(c *gin.Context) {
token := c.GetHeader("Authorization")
if len(token) > 7 {
token = token[7:] // 去除 "Bearer "
}
ctrl.userService.Logout(token)
common.Success(c, nil)
}
// GetUserInfo 获取当前登录用户信息
// @Summary Sys获取当前登录用户信息
// @Tags 认证
// @Success 200 {object} common.Response
// @Router /sys/auth/info [get]
func (ctrl *AuthController) GetUserInfo(c *gin.Context) {
user := common.GetLoginUser(c)
if user == nil {
common.Error(c, 401, "未登录")
return
}
common.Success(c, user)
}