package auth import ( "base-go-v2/internal/db" response "base-go-v2/internal/reponse" "base-go-v2/internal/router" "base-go-v2/internal/utils/jwtx" "base-go-v2/internal/utils/mapx" "base-go-v2/internal/utils/uid" ) func InitAuthRouter(r *router.Router) { group := r.Group("auth") group.POST("/login/default", loginDefault) group.POST("/register/default", registerDefault) group.POST("/refresh/token", RefreshAccessToken) } func RefreshAccessToken(c *router.Context) error { // 从 Header 获取 Refresh Token refreshToken := c.Header("refreshToken") if refreshToken == "" { return response.Fail(c). Code(response.HttpCode.Unauthorized). Message("未提供 Token"). Send() } // 验证 Refresh Token tokenResult := jwtx.VerifyToken(refreshToken) if !tokenResult.IsValid || tokenResult.IsExpired { // Refresh Token 无效或过期,需要重新登录 return response.Fail(c). Code(response.HttpCode.Unauthorized). Message("登录已过期,请重新登录"). Send() } userID := tokenResult.Claims.UserID // 生成新的 Access Token newAccessToken, err := jwtx.CreateAccessToken(userID) if err != nil { return err } // 返回新的 Access Token respData := map[string]string{ "accessToken": newAccessToken, } return response.Success(c). Data(respData). Send() } // 默认登录 func loginDefault(c *router.Context) error { // 获取请求体并校验必填字段 bodyData, err := c.GetBodyWithRequired("account", "password") if err != nil { return c.AddError(err) } account := bodyData.GetString("account") password := bodyData.GetString("password") // 查询用户 userQuery := mapx.New().SetKV( "account", account, "password", password, ) user, err := db.FindOne("user_info", userQuery) if err != nil { return response.Success(c).Message("查询用户失败,请稍后重试").Send() } if user == nil { // 账号或密码错误 return response.Fail(c). Message("账号或密码错误"). Send() } userId := user.GetInt("id") // 创建 Access Token 和 Refresh Token accessToken, err := jwtx.CreateAccessToken(userId) if err != nil { return err } refreshToken, err := jwtx.CreateRefreshToken(userId) if err != nil { return err } // 返回数据 respData := mapx.New(). SetIntToString("userId", userId). SetKV( "username", user.GetString("username"), "seqNo", user.GetInt("seq_no"), "gender", user.GetInt("gender"), "accessToken", accessToken, "refreshToken", refreshToken, ) return response.Success(c). Data(respData). Send() } func registerDefault(c *router.Context) error { bodyData, err := c.GetBodyWithRequired("account", "password") if err != nil { return c.AddError(err) } account := bodyData.GetString("account") password := bodyData.GetString("password") // 构造查询条件,检查账号是否已存在 accountQuery := mapx.New().SetKV("account", account) existingUsers, err := db.FindOne("user_info", accountQuery) if err != nil { return c.AddError(err) } if existingUsers != nil { return response.Fail(c).Message("该账号已被注册").Send() } // 构造新用户数据 newUserData := mapx.New().SetKV( "id", uid.NextID(), "account", account, "password", password, ) // 插入新用户 insertedRows, err := db.InsertOne("user_info", newUserData) if err != nil { } if insertedRows != 1 { return response.Fail(c).Message("注册失败").Send() } return response.Success(c).Message("注册成功").Send() }