From b107b88800dba45f2ecbb2e1ab837755a154203d Mon Sep 17 00:00:00 2001 From: tangping Date: Tue, 7 Jan 2025 16:43:33 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=80=E4=BA=9B=E6=A1=86=E6=9E=B6=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- trunk/.idea/workspace.xml | 15 ++++-- .../center/admincenter/internal/admin/api.go | 15 ++++-- trunk/center/admincenter/main.go | 3 ++ trunk/center/common/remark/remarkMgr.go | 8 +++- trunk/center/common/webServer/reflect.go | 5 ++ trunk/center/common/webServer/serverMux.go | 18 +++++--- trunk/center/common/webServer/tokenHandler.go | 26 +++++++++-- trunk/center/usercenter/internal/game/api.go | 46 ++++++++++++++++++- trunk/center/usercenter/internal/user/api.go | 8 ++-- 9 files changed, 120 insertions(+), 24 deletions(-) diff --git a/trunk/.idea/workspace.xml b/trunk/.idea/workspace.xml index a7a2394..f058e30 100644 --- a/trunk/.idea/workspace.xml +++ b/trunk/.idea/workspace.xml @@ -6,6 +6,14 @@ + + + + + + + + + { "associatedIndex": 3 @@ -53,7 +62,7 @@ "node.js.detected.package.eslint": "true", "node.js.selected.package.eslint": "(autodetect)", "nodejs_package_manager_path": "npm", - "settings.editor.selected.configurable": "go.sdk" + "settings.editor.selected.configurable": "preferences.pluginManager" } } @@ -63,7 +72,7 @@ - + @@ -119,8 +128,8 @@ - + diff --git a/trunk/center/admincenter/internal/admin/api.go b/trunk/center/admincenter/internal/admin/api.go index 9f3d91a..f189392 100644 --- a/trunk/center/admincenter/internal/admin/api.go +++ b/trunk/center/admincenter/internal/admin/api.go @@ -33,6 +33,7 @@ type AdminApi struct { func init() { moduleName := "AdminApi" methodName := "Add" + skipVerifyTokenPage := true methodDesc := "添加管理员用户" methodAuthor := "tangping" methodMendor := "" @@ -47,7 +48,7 @@ func init() { "id '类型:int'": "管理员id", } }` - remark.RegisterMethodRemark(moduleName, methodName, methodDesc, methodAuthor, methodMendor, methodDate, methodInParam, methodOutParam) + remark.RegisterMethodRemark(moduleName, methodName, methodDesc, methodAuthor, methodMendor, methodDate, methodInParam, methodOutParam, skipVerifyTokenPage) } func (a *AdminApi) Add(account string, name string, password string, sex int32, birthday string, phone int64, email string, wechatGroup string, describe string) (responseObj *webServer.ResponseObject) { responseObj = webServer.GetInitResponseObj() @@ -86,6 +87,7 @@ func (a *AdminApi) Add(account string, name string, password string, sex int32, func init() { moduleName := "AdminApi" methodName := "Get" + skipVerifyTokenPage := false methodDesc := "获取管理员用户" methodAuthor := "tangping" methodMendor := "" @@ -108,12 +110,14 @@ func init() { } }` - remark.RegisterMethodRemark(moduleName, methodName, methodDesc, methodAuthor, methodMendor, methodDate, methodInParam, methodOutParam) + remark.RegisterMethodRemark(moduleName, methodName, methodDesc, methodAuthor, methodMendor, methodDate, methodInParam, methodOutParam, skipVerifyTokenPage) } -func (a *AdminApi) Get(adminId int64) (responseObj *webServer.ResponseObject) { +func (a *AdminApi) Get(useAdmin *Admin, adminId int64) (responseObj *webServer.ResponseObject) { responseObj = webServer.GetInitResponseObj() + //获取当前登录用户信息 + //验证参数 if adminId == 0 { responseObj.SetResultStatus(resultStatus.APIDataError) @@ -145,6 +149,7 @@ func (a *AdminApi) Get(adminId int64) (responseObj *webServer.ResponseObject) { func init() { moduleName := "AdminApi" methodName := "Login" + skipVerifyTokenPage := true methodDesc := "管理员登录" methodAuthor := "tangping" methodMendor := "" @@ -160,7 +165,7 @@ func init() { } }` - remark.RegisterMethodRemark(moduleName, methodName, methodDesc, methodAuthor, methodMendor, methodDate, methodInParam, methodOutParam) + remark.RegisterMethodRemark(moduleName, methodName, methodDesc, methodAuthor, methodMendor, methodDate, methodInParam, methodOutParam, skipVerifyTokenPage) } func (a *AdminApi) Login(account string, password string) (responseObj *webServer.ResponseObject) { @@ -187,7 +192,7 @@ func (a *AdminApi) Login(account string, password string) (responseObj *webServe } //添加登录用户 - webServer.AddLoginUserToken(token, &webServer.TokenInfo{Id: adminData.ID, Account: account}) + webServer.AddLoginUserToken(token, &webServer.TokenInfo{Id: adminData.ID, Account: account, UserInfo: adminData}) //adminData映射成map resultMap := make(map[string]any) diff --git a/trunk/center/admincenter/main.go b/trunk/center/admincenter/main.go index 646a1a3..2318319 100644 --- a/trunk/center/admincenter/main.go +++ b/trunk/center/admincenter/main.go @@ -35,6 +35,9 @@ func main() { // 目前函数的实现为空,需要根据实际的配置加载逻辑进行填充。 func loadConfig() { + //设置数据类型 + connection.SetModelDB(connection.GetAdminDB()) + //构建数据库 connection.BuildDB() } diff --git a/trunk/center/common/remark/remarkMgr.go b/trunk/center/common/remark/remarkMgr.go index be0fb06..7240170 100644 --- a/trunk/center/common/remark/remarkMgr.go +++ b/trunk/center/common/remark/remarkMgr.go @@ -1,6 +1,7 @@ package remark import ( + "common/webServer" "goutil/logUtilPlus" ) @@ -41,7 +42,7 @@ func RegisterModuleRemark(name, desc, author, mendor, date string) { // @outParam: 输出参数 // // return: -func RegisterMethodRemark(moduleName, name, desc, author, mendor, date string, inParam []string, outParam string) { +func RegisterMethodRemark(moduleName, name, desc, author, mendor, date string, inParam []string, outParam string, skipVerifyTokenPage bool) { var moduleRemark *ModuleRemark var exists bool for _, item := range remarksSlice { @@ -57,4 +58,9 @@ func RegisterMethodRemark(moduleName, name, desc, author, mendor, date string, i } moduleRemark.MethodRemarkSlice = append(moduleRemark.MethodRemarkSlice, newMethodRemark(moduleName, name, desc, author, mendor, date, inParam, outParam)) + + //跳过登录验证 + if skipVerifyTokenPage { + webServer.AddSkipVerifyTokenPage(moduleName, name) + } } diff --git a/trunk/center/common/webServer/reflect.go b/trunk/center/common/webServer/reflect.go index 79dfc1a..854230a 100644 --- a/trunk/center/common/webServer/reflect.go +++ b/trunk/center/common/webServer/reflect.go @@ -387,6 +387,11 @@ func CallFunction(requestObj *RequestObject) (responseObj *ResponseObject) { in[i] = reflect.ValueOf(param_uint8) } } + case reflect.Pointer: + //if paramStruct, ok := paramItem.(struct{}); ok { + // in[i] = reflect.ValueOf(paramStruct) + //} + in[i] = reflect.ValueOf(paramItem) } } diff --git a/trunk/center/common/webServer/serverMux.go b/trunk/center/common/webServer/serverMux.go index 3aca796..424ab62 100644 --- a/trunk/center/common/webServer/serverMux.go +++ b/trunk/center/common/webServer/serverMux.go @@ -91,24 +91,28 @@ func (mux *selfDefineMux) ServeHTTP(w http.ResponseWriter, r *http.Request) { return } + params, err = context.RequestDataBySlice2ByJson() + if err != nil { + responseResult(w, responseObj.SetResultStatus(resultStatus.APIDataError)) + return + } + //验证是否登录 - if strs[0] != "AdminApi" || strs[1] != "Login" { + if !IsSkipVerifyTokenPage(strs[0], strs[1]) { tokenStr := context.header.Get("token") // token 转型成 int64 token := stringUtil.StringToInt64(tokenStr) //是否存在 - if !CheckToken(token) { + exist, tokenData := CheckToken(token) + if !exist { responseResult(w, responseObj.SetResultStatus(resultStatus.NotLogin)) return } - } - params, err = context.RequestDataBySlice2ByJson() - if err != nil { - responseResult(w, responseObj.SetResultStatus(resultStatus.APIDataError)) - return + //添加登录用户到参数里的第一个 + params = append([]interface{}{tokenData.UserInfo}, params...) } resquestData := NewRequestObject(strs[0], strs[1], params) diff --git a/trunk/center/common/webServer/tokenHandler.go b/trunk/center/common/webServer/tokenHandler.go index 24048fd..bebf6ad 100644 --- a/trunk/center/common/webServer/tokenHandler.go +++ b/trunk/center/common/webServer/tokenHandler.go @@ -11,6 +11,9 @@ var ( //锁 lock sync.RWMutex + + //跳过验证token的页面 + skipVerifyTokenPage = make(map[string]bool) ) type TokenInfo struct { @@ -20,6 +23,9 @@ type TokenInfo struct { //管理员账号 Account string + //登录用户缓存 + UserInfo any + //过期时间 ExpireTime time.Time } @@ -57,7 +63,7 @@ func AddLoginUserToken(token int64, tokenInfo *TokenInfo) { // 返回值: // // bool: 表示令牌是否有效的布尔值,true表示有效,false表示无效 -func CheckToken(token int64) bool { +func CheckToken(token int64) (bool, *TokenInfo) { //添加锁防止并发 lock.Lock() @@ -70,7 +76,7 @@ func CheckToken(token int64) bool { tokenInfo, ok := loginUserMap[token] if !ok { // 如果没有找到对应的用户信息,则令牌无效 - return false + return false, nil } // 获取令牌过期时间 @@ -82,11 +88,23 @@ func CheckToken(token int64) bool { //移除令牌 delete(loginUserMap, token) - return false + return false, nil } //如果生效的话,则更新过期时间 tokenInfo.ExpireTime = now.Add(time.Hour * 24) - return true + return true, tokenInfo +} + +func AddSkipVerifyTokenPage(moduleName, methodName string) { + skipVerifyTokenPage[moduleName+"_"+methodName] = true +} + +func IsSkipVerifyTokenPage(moduleName, methodName string) bool { + exist, ok := skipVerifyTokenPage[moduleName+"_"+methodName] + if !exist { + return false + } + return ok } diff --git a/trunk/center/usercenter/internal/game/api.go b/trunk/center/usercenter/internal/game/api.go index 21367b7..5c0ebe9 100644 --- a/trunk/center/usercenter/internal/game/api.go +++ b/trunk/center/usercenter/internal/game/api.go @@ -2,7 +2,9 @@ package game import ( "common/remark" + "common/resultStatus" "common/webServer" + "logincenter/internal/user" ) func init() { @@ -12,7 +14,7 @@ func init() { } func init() { - moduleName := "UserApi" + moduleName := "GameApi" desc := "用户接口" author := "tangping" mendor := "" @@ -23,3 +25,45 @@ func init() { // GameApi 游戏接口 type GameApi struct { } + +func init() { + moduleName := "GameApi" + methodName := "Add" + skipVerifyTokenPage := false + methodDesc := "添加游戏" + methodAuthor := "tangping" + methodMendor := "" + methodDate := "2024-12-25 15:55:00" + methodInParam := []string{"string 账号,int 游戏id"} + methodOutParam := ` + { + "Code '类型:int'": "响应结果的状态值", + "Message '类型:string'": "响应结果的状态值所对应的描述信息", + "Data '类型:interface{}'": "响应结果的数据" + { + + } + }` + remark.RegisterMethodRemark(moduleName, methodName, methodDesc, methodAuthor, methodMendor, methodDate, methodInParam, methodOutParam, skipVerifyTokenPage) +} + +func (this *GameApi) Add(userData *user.User, account string, gameId int64) (responseObj *webServer.ResponseObject) { + responseObj = webServer.GetInitResponseObj() + + //用户登录用户数据 + + //参数验证 + + //添加游戏 + game := &Game{ + Account: account, + GameID: int64(gameId), + } + + gameId, err := AddGame(userData, game) + if err != nil { + return responseObj.SetResultStatus(resultStatus.DataError) + } + + return +} diff --git a/trunk/center/usercenter/internal/user/api.go b/trunk/center/usercenter/internal/user/api.go index 530ea3c..54c7e3e 100644 --- a/trunk/center/usercenter/internal/user/api.go +++ b/trunk/center/usercenter/internal/user/api.go @@ -33,6 +33,7 @@ type UserApi struct { func init() { moduleName := "UserApi" methodName := "Register" + skipVerifyTokenPage := true methodDesc := "注册用户" methodAuthor := "tangping" methodMendor := "" @@ -47,7 +48,7 @@ func init() { "id '类型:int'": "用户id", } }` - remark.RegisterMethodRemark(moduleName, methodName, methodDesc, methodAuthor, methodMendor, methodDate, methodInParam, methodOutParam) + remark.RegisterMethodRemark(moduleName, methodName, methodDesc, methodAuthor, methodMendor, methodDate, methodInParam, methodOutParam, skipVerifyTokenPage) } func (a *UserApi) Register(account string, name string, password string, sex int32, birthday string, phone int64, email string, wechatGroup string, describe string) (responseObj *webServer.ResponseObject) { responseObj = webServer.GetInitResponseObj() @@ -86,6 +87,7 @@ func (a *UserApi) Register(account string, name string, password string, sex int func init() { moduleName := "UserApi" methodName := "Login" + skipVerifyTokenPage := true methodDesc := "用户登录" methodAuthor := "tangping" methodMendor := "" @@ -101,7 +103,7 @@ func init() { } }` - remark.RegisterMethodRemark(moduleName, methodName, methodDesc, methodAuthor, methodMendor, methodDate, methodInParam, methodOutParam) + remark.RegisterMethodRemark(moduleName, methodName, methodDesc, methodAuthor, methodMendor, methodDate, methodInParam, methodOutParam, skipVerifyTokenPage) } func (a *UserApi) Login(account string, password string) (responseObj *webServer.ResponseObject) { @@ -128,7 +130,7 @@ func (a *UserApi) Login(account string, password string) (responseObj *webServer } //添加登录用户 - webServer.AddLoginUserToken(token, &webServer.TokenInfo{Id: userData.ID, Account: account}) + webServer.AddLoginUserToken(token, &webServer.TokenInfo{Id: userData.ID, Account: account, UserInfo: userData}) //UserData映射成map resultMap := make(map[string]any)