kra/internal/server/handler/system/sys_base.go

78 lines
1.7 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package system
import (
"kra/pkg/jwt"
"kra/pkg/response"
"kra/pkg/utils"
"github.com/gin-gonic/gin"
)
type BaseApi struct{}
// LoginRequest 登录请求
type LoginRequest struct {
Username string `json:"username" binding:"required"`
Password string `json:"password" binding:"required"`
Captcha string `json:"captcha"`
CaptchaId string `json:"captchaId"`
}
// LoginResponse 登录响应
type LoginResponse struct {
User interface{} `json:"user"`
Token string `json:"token"`
ExpiresAt int64 `json:"expiresAt"`
}
// JWT实例需要在初始化时设置
var jwtInstance *jwt.JWT
// SetJWTInstance 设置JWT实例
func SetJWTInstance(j *jwt.JWT) {
jwtInstance = j
}
// Login 用户登录
func (b *BaseApi) Login(c *gin.Context) {
var req LoginRequest
if err := c.ShouldBindJSON(&req); err != nil {
response.FailWithMessage(err.Error(), c)
return
}
user, err := userUsecase.Login(c, req.Username, req.Password)
if err != nil {
response.FailWithMessage("用户名不存在或者密码错误", c)
return
}
if user.Enable != 1 {
response.FailWithMessage("用户被禁止登录", c)
return
}
// 生成token
claims := jwtInstance.CreateClaims(jwt.BaseClaims{
UUID: user.UUID.String(),
ID: user.ID,
Username: user.Username,
NickName: user.NickName,
AuthorityID: user.AuthorityId,
})
token, err := jwtInstance.CreateToken(claims.BaseClaims)
if err != nil {
response.FailWithMessage("获取token失败", c)
return
}
utils.SetToken(c, token, int(jwtInstance.ExpiresAt.Seconds()))
response.OkWithDetailed(LoginResponse{
User: toUserResponse(user),
Token: token,
ExpiresAt: claims.ExpiresAt.UnixMilli(),
}, "登录成功", c)
}