Merge branch 'dev_login' of git.pogorockgames.com:mango-games/server/game into dev_login
This commit is contained in:
commit
cd76c7a5a9
|
@ -522,11 +522,12 @@ const (
|
|||
)
|
||||
|
||||
const (
|
||||
LoginTypeGuest = 0 // 游客登录
|
||||
LoginTypeAccount = 1 // 账号登录
|
||||
LoginTypeTelCode = 2 // 手机号验证码登录
|
||||
LoginTypeTelegram = 5 // telegram登录
|
||||
LoginTypeGoogle = 6 // google,facebook 登录
|
||||
LoginTypeGuest = 0 // 游客登录
|
||||
LoginTypeAccount = 1 // 账号登录
|
||||
LoginTypeTelCode = 2 // 手机号验证码登录
|
||||
LoginTypeTelegram = 5 // telegram登录
|
||||
LoginTypeGoogle = 6 // google,facebook 登录
|
||||
LoginTypePlatformToken = 7 // 平台token 登录
|
||||
|
||||
RegisterTypeTel = 3 // 手机号注册
|
||||
RegisterTypeName = 4 // 账号注册
|
||||
|
|
|
@ -239,6 +239,16 @@ func (svc *AccountSvc) AccountIsExist(args *model.AccIsExistArg, ret *model.AccR
|
|||
ret.Tag = common.RegisterExist
|
||||
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:
|
||||
ret.Tag = common.LoginTypeNoExist
|
||||
|
|
|
@ -162,7 +162,7 @@ func PlatformSrvApi(rw http.ResponseWriter, req *http.Request) {
|
|||
realSign := webapi.MD5Params(params, PLATFORMAPPKEY, "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)
|
||||
webApiResponse(rw, nil /*map[string]interface{}{webapi.RESPONSE_STATE: webapi.STATE_ERR, webapi.RESPONSE_ERRMSG: "Sign error!"}*/)
|
||||
return
|
||||
|
@ -224,11 +224,10 @@ func PlatformSrvApi(rw http.ResponseWriter, req *http.Request) {
|
|||
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(result[:]), startTime, ps)
|
||||
mq.Write(log)
|
||||
}
|
||||
|
||||
log := model.NewAPILog(req.URL.Path, req.URL.RawQuery, string(data[:]), req.RemoteAddr, string(rep[:]), startTime, ps)
|
||||
mq.Write(log)
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
|
|
|
@ -93,6 +93,7 @@ type GameParam struct {
|
|||
ClientVersion int32 // 客户端版本号
|
||||
ClientVersionChannel []string // 客户端版本号包渠道
|
||||
SwapShopUrl string // 交换商城地址
|
||||
PlatformClientAddr string // 休闲平台客户端地址
|
||||
}
|
||||
|
||||
var GameParamPath = "../data/gameparam.json"
|
||||
|
|
|
@ -5,6 +5,7 @@ import (
|
|||
"crypto/tls"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"github.com/golang-jwt/jwt/v4"
|
||||
"io"
|
||||
"net"
|
||||
"net/http"
|
||||
|
@ -216,3 +217,18 @@ func Stats() map[string]ApiStats {
|
|||
})
|
||||
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)
|
||||
}
|
||||
|
||||
// 平台创建账号请求
|
||||
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 {
|
||||
Code int `json:"code"`
|
||||
|
|
|
@ -38,10 +38,21 @@ type TaskLogin struct {
|
|||
// in task.Worker goroutine
|
||||
func (t *TaskLogin) Call(o *basic.Object) interface{} {
|
||||
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验证
|
||||
//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 {
|
||||
case common.LoginOk:
|
||||
|
|
|
@ -6,6 +6,7 @@ import (
|
|||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"github.com/golang-jwt/jwt/v4"
|
||||
"io"
|
||||
"reflect"
|
||||
"slices"
|
||||
|
@ -2879,24 +2880,81 @@ func init() {
|
|||
|
||||
WebAPIHandlerMgrSingleton.RegisteWebAPIHandler("/api/platform/createUser", WebAPIHandlerWrapper(
|
||||
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{
|
||||
Success: false,
|
||||
Code: 200,
|
||||
Message: "未知错误",
|
||||
}
|
||||
pack.Data.Url = "http://192.168.31.173/web-mobile-p102/"
|
||||
|
||||
logger.Logger.Tracef("/api/platform/createUse %v", pack)
|
||||
|
||||
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{} {
|
||||
//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.Message = "返回成功"
|
||||
|
||||
return nil
|
||||
}), 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.Resume()
|
||||
|
|
Loading…
Reference in New Issue