feat(auth): 添加用户登录功能

This commit is contained in:
unclesam committed 2026-07-07 22:19:37 +08:00
1 parent 92a9e20934
commit 63c8f2980b
10 files changed
+210 -18

No files matched your search

+74
View File
@@ -0,0 +1,74 @@
package auth_api
import (
"EnGin/internal/global"
"EnGin/internal/middleware"
"EnGin/internal/service/auth_ser"
"EnGin/internal/utils/jwts"
"EnGin/internal/utils/res"
"errors"
"github.com/gin-gonic/gin"
"go.uber.org/zap"
)
type LoginRequest struct {
Username string `json:"username" binding:"required" label:"用户名"`
Password string `json:"password" binding:"required" label:"密码"`
}
type LoginResponse struct {
AccessToken string `json:"access_token"`
RefreshToken string `json:"refresh_token"`
}
func (AuthApi) LoginView(c *gin.Context) {
cr := middleware.GetBind[LoginRequest](c)
u, err := auth_ser.Login(c.Request.Context(), cr.Username, cr.Password)
if err != nil {
if errors.Is(err, auth_ser.ErrUserNotFound) {
global.Log.Warn("用户不存在", zap.String("username", cr.Username), zap.Error(err))
res.BadRequest("用户名或密码错误", c)
return
}
if errors.Is(err, auth_ser.ErrAccount) {
res.FailWithMsg("用户名或密码错误", c)
return
}
global.Log.Error("登陆系统异常", zap.Error(err))
res.InternalError("登陆失败,请稍后重试", c)
return
}
// 提取预加载的角色 ID 列表
var roleIds []uint
for _, role := range u.Edges.Roles {
roleIds = append(roleIds, uint(role.ID))
}
claims := jwts.Claims{
UserID: uint(u.ID),
Roles: roleIds, // 将关联查询出的角色 ID 塞进 token
Email: u.Email,
}
accessToken, err := jwts.GenAccessToken(claims)
if err != nil {
res.InternalError("生成 accessToken 失败", c)
return
}
refreshToken, err := jwts.GenRefreshToken(uint(u.ID))
if err != nil {
res.InternalError("生成 refreshToken 失败", c)
return
}
res.OkWithData(LoginResponse{
AccessToken: accessToken,
RefreshToken: refreshToken,
}, c)
}