Merge branch 'dev_login' of git.pogorockgames.com:mango-games/server/game into dev_login
This commit is contained in:
commit
cd76c7a5a9
|
@ -527,6 +527,7 @@ const (
|
||||||
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 // 账号注册
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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
|
||||||
|
}
|
||||||
|
|
|
@ -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"`
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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()
|
||||||
|
|
Loading…
Reference in New Issue