diff --git a/api/request/tokenApi.go b/api/request/tokenApi.go index b59259a..3772c99 100644 --- a/api/request/tokenApi.go +++ b/api/request/tokenApi.go @@ -5,5 +5,9 @@ import "github.com/gogf/gf/v2/frame/g" type TokenCreateReq struct { g.Meta `path:"/create" tags:"创建" method:"get" summary:"创建 Token"` } - type TokenCreateRes struct{} + +type TokenVerifyReq struct { + g.Meta `path:"/verify" tags:"验证" method:"get" summary:"验证 Token"` +} +type TokenVerifyRes struct{} diff --git a/internal/controller/auth/token/tokenController.go b/internal/controller/auth/token/tokenController.go index 59a0a00..33131aa 100644 --- a/internal/controller/auth/token/tokenController.go +++ b/internal/controller/auth/token/tokenController.go @@ -4,12 +4,16 @@ import ( "PersonalMain/api/request" "PersonalMain/internal/model/do" "PersonalMain/internal/service" - "PersonalMain/utility" + "PersonalMain/utility/ErrorCode" + "PersonalMain/utility/ResultUtil" "context" "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/net/ghttp" ) +// TokenCreate +// +// 生成 Token func (_ *ControllerV1) TokenCreate(ctx context.Context, _ *request.TokenCreateReq) (res *request.TokenCreateRes, err error) { // 获取 Cookie 是否存在 req := ghttp.RequestFromCtx(ctx) @@ -21,16 +25,42 @@ func (_ *ControllerV1) TokenCreate(ctx context.Context, _ *request.TokenCreateRe token = tokenService.GetToken(req) if tokenService.VerifyToken(token) { // 有效则输出Token依然有效 - utility.Success(req, "Token 依然有效", nil) + ResultUtil.Success(req, "Token 依然有效", nil) } else { // 生成新的 Session token = tokenService.CreateToken() - utility.Success(req, "Token 已重新生成", g.Map{"token": token.Token}) + ResultUtil.Success(req, "Token 已重新生成", g.Map{"token": token.Token}) } } else { // 生成新的 Session token = tokenService.CreateToken() - utility.Success(req, "Token 已生成", g.Map{"token": token.Token}) + ResultUtil.Success(req, "Token 已生成", g.Map{"token": token.Token}) + } + return res, err +} + +// TokenVerify +// +// 验证 Token +func (_ *ControllerV1) TokenVerify(ctx context.Context, _ *request.TokenVerifyReq) (res *request.TokenVerifyRes, err error) { + // 获取 Cookie 是否存在 + req := ghttp.RequestFromCtx(ctx) + hasCookie := req.Cookie.Contains("token") + tokenService := service.NewTokenService() + var token *do.TokenDO + if hasCookie { + // 检查 Session 是否有效 + token = tokenService.GetToken(req) + if tokenService.VerifyToken(token) { + // 有效则输出Token依然有效 + ResultUtil.SuccessNoData(req, "Token 有效") + } else { + // 生成新的 Session + token = tokenService.CreateToken() + ResultUtil.ErrorNoData(req, ErrorCode.TokenVerifyFailed) + } + } else { + ResultUtil.ErrorNoData(req, ErrorCode.TokenExpired) } return res, err } diff --git a/utility/ErrorCode/ErrorCode.go b/utility/ErrorCode/ErrorCode.go index 8e31808..cb1d033 100644 --- a/utility/ErrorCode/ErrorCode.go +++ b/utility/ErrorCode/ErrorCode.go @@ -13,7 +13,8 @@ type Errors interface { } var ( - NoneDataResult = ErrorCode{output: "success", code: 200, message: "success"} + TokenExpired = ErrorCode{output: "error", code: 40100, message: "Token 已过期"} + TokenVerifyFailed = ErrorCode{output: "error", code: 40101, message: "Token 验证失败"} ) func (e ErrorCode) Output() string { diff --git a/utility/ResultUtil.go b/utility/ResultUtil/ResultUtil.go similarity index 73% rename from utility/ResultUtil.go rename to utility/ResultUtil/ResultUtil.go index 8b0cf16..24ddbc0 100644 --- a/utility/ResultUtil.go +++ b/utility/ResultUtil/ResultUtil.go @@ -1,4 +1,4 @@ -package utility +package ResultUtil import ( "PersonalMain/utility/ErrorCode" @@ -31,6 +31,9 @@ func SuccessNoData(req *ghttp.Request, message string) { }) } +// Error +// +// 错误输出(包含 data) func Error(req *ghttp.Request, errorCode ErrorCode.ErrorCode, data interface{}) { req.Response.WriteJson(g.Map{ "output": errorCode.Output(), @@ -40,6 +43,20 @@ func Error(req *ghttp.Request, errorCode ErrorCode.ErrorCode, data interface{}) }) } +// ErrorNoData +// +// 错误输出(不含 data) +func ErrorNoData(req *ghttp.Request, errorCode ErrorCode.ErrorCode) { + req.Response.WriteJson(g.Map{ + "output": errorCode.Output(), + "code": errorCode.Code(), + "message": errorCode.Message(), + }) +} + +// ErrorDefault +// +// 默认错误输出(包含 data) func ErrorDefault(req *ghttp.Request, output string, code int, message string, data interface{}) { req.Response.WriteJson(g.Map{ "output": output,