Files
Message-Push-Nest/routers/api/auth.go
T

67 lines
1.7 KiB
Go
Raw Normal View History

2023-12-30 17:40:20 +08:00
package api
import (
2025-10-01 00:19:48 +08:00
"fmt"
"net/http"
2023-12-30 17:40:20 +08:00
2025-10-01 00:19:48 +08:00
"github.com/gin-gonic/gin"
2023-12-30 17:40:20 +08:00
2025-10-01 00:19:48 +08:00
"message-nest/pkg/app"
"message-nest/pkg/e"
"message-nest/pkg/util"
"message-nest/service/auth_service"
2025-10-12 13:48:58 +08:00
"message-nest/service/settings_service"
2025-10-01 00:19:48 +08:00
"message-nest/models"
2023-12-30 17:40:20 +08:00
)
type auth struct {
Username string `valid:"Required; MaxSize(50)"`
Password string `valid:"Required; MaxSize(50)"`
}
type ReqAuth struct {
2024-03-07 14:17:12 +08:00
Username string `json:"username" validate:"required,max=50" label:"用户名"`
Password string `json:"passwd" validate:"required,max=50" label:"密码"`
2023-12-30 17:40:20 +08:00
}
func GetAuth(c *gin.Context) {
2024-01-01 13:09:44 +08:00
var (
appG = app.Gin{C: c}
req ReqAuth
)
2024-01-01 13:36:01 +08:00
2024-01-01 13:09:44 +08:00
errCode, errMsg := app.BindJsonAndPlayValid(c, &req)
if errCode != e.SUCCESS {
appG.CResponse(errCode, errMsg, nil)
2023-12-30 17:40:20 +08:00
return
}
2024-01-01 13:09:44 +08:00
authService := auth_service.Auth{Username: req.Username, Password: req.Password}
2023-12-30 17:40:20 +08:00
isExist, err := authService.Check()
if err != nil {
2024-01-01 13:09:44 +08:00
appG.CResponse(http.StatusInternalServerError, fmt.Sprintf("校验失败:%s", err), nil)
2023-12-30 17:40:20 +08:00
return
}
if !isExist {
2024-01-01 13:09:44 +08:00
appG.CResponse(http.StatusUnauthorized, "账号或密码不正确!", nil)
2023-12-30 17:40:20 +08:00
return
}
2025-10-12 13:48:58 +08:00
// 获取配置的 cookie 过期天数
expDays := settings_service.GetCookieExpDays()
token, err := util.GenerateToken(req.Username, req.Password, expDays)
2023-12-30 17:40:20 +08:00
if err != nil {
2024-01-01 13:09:44 +08:00
appG.CResponse(http.StatusInternalServerError, fmt.Sprintf("生成token失败:%s", err), nil)
2023-12-30 17:40:20 +08:00
return
}
2025-10-01 00:19:48 +08:00
// 查询用户ID并记录登录日志
if u, _ := models.GetUserByUsername(req.Username); u != nil {
_ = models.AddLoginLog(u.ID, req.Username, c.ClientIP(), c.GetHeader("User-Agent"))
}
appG.CResponse(http.StatusOK, "登录成功!", map[string]string{
2023-12-30 17:40:20 +08:00
"token": token,
})
}