休闲平台登录修改

This commit is contained in:
DESKTOP-45ANQ2C\unis 2024-12-11 17:35:31 +08:00
parent be3d093b0a
commit b69974bcb1
8 changed files with 121 additions and 16 deletions

View File

@ -522,11 +522,12 @@ const (
) )
const ( const (
LoginTypeGuest = 0 // 游客登录 LoginTypeGuest = 0 // 游客登录
LoginTypeAccount = 1 // 账号登录 LoginTypeAccount = 1 // 账号登录
LoginTypeTelCode = 2 // 手机号验证码登录 LoginTypeTelCode = 2 // 手机号验证码登录
LoginTypeTelegram = 5 // telegram登录 LoginTypeTelegram = 5 // telegram登录
LoginTypeGoogle = 6 // google,facebook 登录 LoginTypeGoogle = 6 // google,facebook 登录
LoginTypePlatformToken = 7 // 平台token 登录
RegisterTypeTel = 3 // 手机号注册 RegisterTypeTel = 3 // 手机号注册
RegisterTypeName = 4 // 账号注册 RegisterTypeName = 4 // 账号注册

View File

@ -239,6 +239,16 @@ func (svc *AccountSvc) AccountIsExist(args *model.AccIsExistArg, ret *model.AccR
ret.Tag = common.RegisterExist ret.Tag = common.RegisterExist
return nil return nil
} }
case common.LoginTypePlatformToken:
//平台token注册
err := caccounts.Find(bson.M{"username": args.Username, "tagkey": args.TagKey}).One(acc)
if err != nil {
if errors.Is(err, mgo.ErrNotFound) {
ret.Tag = common.LoginNew
return nil
}
return err
}
default: default:
ret.Tag = common.LoginTypeNoExist ret.Tag = common.LoginTypeNoExist

View File

@ -162,7 +162,7 @@ func PlatformSrvApi(rw http.ResponseWriter, req *http.Request) {
realSign := webapi.MD5Params(params, PLATFORMAPPKEY, "sign") realSign := webapi.MD5Params(params, PLATFORMAPPKEY, "sign")
sign := params["sign"] sign := params["sign"]
if realSign != sign { if realSign != sign && !common.Config.IsDevMode {
logger.Logger.Info(req.RemoteAddr, " srvCtrlMain sign error: expect ", realSign, " ; but get ", sign, " raw=", params) logger.Logger.Info(req.RemoteAddr, " srvCtrlMain sign error: expect ", realSign, " ; but get ", sign, " raw=", params)
webApiResponse(rw, nil /*map[string]interface{}{webapi.RESPONSE_STATE: webapi.STATE_ERR, webapi.RESPONSE_ERRMSG: "Sign error!"}*/) webApiResponse(rw, nil /*map[string]interface{}{webapi.RESPONSE_STATE: webapi.STATE_ERR, webapi.RESPONSE_ERRMSG: "Sign error!"}*/)
return return
@ -224,11 +224,10 @@ func PlatformSrvApi(rw http.ResponseWriter, req *http.Request) {
atomic.StoreInt64(&stats.MaxRuningTime, ps) atomic.StoreInt64(&stats.MaxRuningTime, ps)
} }
} }
result, err := json.Marshal(rep)
if err == nil { log := model.NewAPILog(req.URL.Path, req.URL.RawQuery, string(data[:]), req.RemoteAddr, string(rep[:]), startTime, ps)
log := model.NewAPILog(req.URL.Path, req.URL.RawQuery, string(data[:]), req.RemoteAddr, string(result[:]), startTime, ps) mq.Write(log)
mq.Write(log)
}
return return
} }

View File

@ -93,6 +93,7 @@ type GameParam struct {
ClientVersion int32 // 客户端版本号 ClientVersion int32 // 客户端版本号
ClientVersionChannel []string // 客户端版本号包渠道 ClientVersionChannel []string // 客户端版本号包渠道
SwapShopUrl string // 交换商城地址 SwapShopUrl string // 交换商城地址
PlatformClientAddr string // 休闲平台客户端地址
} }
var GameParamPath = "../data/gameparam.json" var GameParamPath = "../data/gameparam.json"

View File

@ -5,6 +5,7 @@ import (
"crypto/tls" "crypto/tls"
"encoding/json" "encoding/json"
"fmt" "fmt"
"github.com/golang-jwt/jwt/v4"
"io" "io"
"net" "net"
"net/http" "net/http"
@ -216,3 +217,18 @@ func Stats() map[string]ApiStats {
}) })
return stats return stats
} }
func ParseJwtWithClaims(key any, jwtStr string, options ...jwt.ParserOption) (jwt.Claims, error) {
mc := jwt.MapClaims{}
token, err := jwt.ParseWithClaims(jwtStr, mc, func(token *jwt.Token) (interface{}, error) {
return key, nil
}, options...)
if err != nil {
return nil, err
}
// 校验 Claims 对象是否有效,基于 exp过期时间nbf不早于iat签发时间等进行判断如果有这些声明的话
if !token.Valid {
return nil, err
}
return token.Claims, nil
}

View File

@ -238,6 +238,15 @@ func ApiGetInviteLink(appId string, body proto.Message) ([]byte, error) {
return postRequest(appId, "/get_invite_link", nil, body, "http", DEFAULT_TIMEOUT) return postRequest(appId, "/get_invite_link", nil, body, "http", DEFAULT_TIMEOUT)
} }
// 平台创建账号请求
type PlatfromCreateAccountReq struct {
Username string `json:"username"`
Channel string `json:"channel"`
Nickname string `json:"nickname"`
Avater string `json:"avater"`
Timestamp int64 `json:"timestamp"`
}
// 平台登录返回 // 平台登录返回
type PlatfromGameLoginRsp struct { type PlatfromGameLoginRsp struct {
Code int `json:"code"` Code int `json:"code"`

View File

@ -38,10 +38,21 @@ type TaskLogin struct {
// in task.Worker goroutine // in task.Worker goroutine
func (t *TaskLogin) Call(o *basic.Object) interface{} { func (t *TaskLogin) Call(o *basic.Object) interface{} {
var playerData *model.PlayerData var playerData *model.PlayerData
acc, retCode := model.AccountIsExist(t.GetUsername(), t.GetUsername(), t.GetPassword(), t.GetPlatform(),
t.GetTimeStamp(), t.GetLoginType(), t.tagkey, false, t.codeValid)
// token验证 // token验证
//claims, err := webapi.ParseJwtWithClaims([]byte(common.Config.AppId), t.Token)
//if err != nil {
// return nil
//}
//
//logger.Logger.Tracef("TaskLogin ParseJwtWithClaims: claims:%v", claims.(jwt.MapClaims))
//username := (claims.(jwt.MapClaims))["Username"]
//expire := (claims.(jwt.MapClaims))["Exp"]
//timeStamp := (claims.(jwt.MapClaims))["Timestamp"]
acc, retCode := model.AccountIsExist(t.GetUsername(), t.GetUsername(), t.GetPassword(), t.GetPlatform(),
t.GetTimeStamp(), t.GetLoginType(), t.tagkey, false, t.codeValid)
switch retCode { switch retCode {
case common.LoginOk: case common.LoginOk:

View File

@ -6,6 +6,7 @@ import (
"encoding/json" "encoding/json"
"errors" "errors"
"fmt" "fmt"
"github.com/golang-jwt/jwt/v4"
"io" "io"
"reflect" "reflect"
"slices" "slices"
@ -2879,24 +2880,81 @@ func init() {
WebAPIHandlerMgrSingleton.RegisteWebAPIHandler("/api/platform/createUser", WebAPIHandlerWrapper( WebAPIHandlerMgrSingleton.RegisteWebAPIHandler("/api/platform/createUser", WebAPIHandlerWrapper(
func(tNode *transact.TransNode, params []byte) (int, interface{}) { func(tNode *transact.TransNode, params []byte) (int, interface{}) {
var AccountInfo *webapi.PlatfromCreateAccountReq
err := json.Unmarshal(params, &AccountInfo)
if err != nil {
logger.Logger.Error("Unmarshal webapi.PlatfromCreateAccountReq error:", err)
}
pack := &webapi.PlatfromGameLoginRsp{ pack := &webapi.PlatfromGameLoginRsp{
Success: false, Success: false,
Code: 200, Code: 200,
Message: "未知错误", Message: "未知错误",
} }
pack.Data.Url = "http://192.168.31.173/web-mobile-p102/"
logger.Logger.Tracef("/api/platform/createUse %v", pack) logger.Logger.Tracef("/api/platform/createUse %v", pack)
var jsonDataRsp []byte var jsonDataRsp []byte
token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{
"Username": AccountInfo.Username,
"Platform": "1",
"Channel": AccountInfo.Channel,
"Timestamp": AccountInfo.Timestamp,
"Exp": time.Now().Add(time.Hour * 24).Unix(),
})
tokenStr, err := token.SignedString([]byte(common.Config.AppId))
if err != nil {
logger.Logger.Errorf("/api/platform/createUser createToken err:%v", err)
return common.ResponseTag_ParamError, jsonDataRsp
}
pack.Data.Url = fmt.Sprintf("%s?access_token=%s", model.GameParamData.PlatformClientAddr, tokenStr)
task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} {
//b, err = webapi.API_ExchangeRecord(common.GetAppId(), msg) acc, retCode := model.AccountIsExist(AccountInfo.Username, "", "", "1", AccountInfo.Timestamp,
common.LoginTypePlatformToken, 0, false, false)
switch retCode {
case common.LoginNew:
acc, retCode = model.InsertAccount(&model.InsertAccountParam{
Platform: "1",
UserName: AccountInfo.Username,
ChannelId: AccountInfo.Channel,
AccountType: 0,
})
if retCode != common.InsertAccountOk {
return playerproto.OpResultCode_OPRC_Error
}
//生成玩家数据
pi, tf := model.InsertPlayerData(&model.InsertPlayerDataParam{
Plt: acc.Platform,
AccId: acc.AccountId.Hex(),
NickName: AccountInfo.Nickname,
HeadUrl: AccountInfo.Avater,
})
if pi == nil || tf == false {
return playerproto.OpResultCode_OPRC_Error
}
logger.Logger.Tracef("/api/platform/createUser LoginNew success: %v", acc)
case common.LoginOk:
logger.Logger.Tracef("/api/platform/createUser LoginOk: %v", acc)
}
pack.Success = true pack.Success = true
pack.Message = "返回成功" pack.Message = "返回成功"
return nil return nil
}), task.CompleteNotifyWrapper(func(i interface{}, t task.Task) { }), task.CompleteNotifyWrapper(func(i interface{}, t task.Task) {
jsonDataRsp, _ = json.Marshal(pack) jsonDataRsp, err = json.Marshal(pack)
if err != nil {
logger.Logger.Errorf("/api/platform/createUser err: %v", err)
}
tNode.TransRep.RetFiels = jsonDataRsp tNode.TransRep.RetFiels = jsonDataRsp
tNode.Resume() tNode.Resume()