go_dreamfactory/modules/user/api_login.go
2022-06-29 11:24:18 +08:00

93 lines
2.0 KiB
Go

package user
import (
"go_dreamfactory/comm"
"go_dreamfactory/lego/sys/event"
"go_dreamfactory/lego/sys/log"
"go_dreamfactory/pb"
"go_dreamfactory/sys/cache"
"time"
"go.mongodb.org/mongo-driver/mongo"
)
//参数校验
func (this *apiComp) LoginCheck(session comm.IUserSession, req *pb.UserLoginReq) (result map[string]interface{}, code comm.ErrorCode) {
result = map[string]interface{}{}
return
}
//登录
func (this *apiComp) Login(session comm.IUserSession, result map[string]interface{}, req *pb.UserLoginReq) (code pb.ErrorCode) {
var (
err error
user *pb.DBUser
)
defer func() {
if user != nil {
err = session.SendMsg(string(this.module.GetType()), UserSubTypeLogin, &pb.UserLoginResp{
Data: user,
})
if err != nil {
code = pb.ErrorCode_SystemError
return
}
event.TriggerEvent(comm.EventUserLogin, user.Uid)
}
}()
// user := decodeUserData(req.Sec)
//从mgo查询user
user, err = this.module.modelUser.User_FindByAccount(req.Sid, req.Account)
if err != nil {
if err != mongo.ErrNoDocuments {
return
}
}
if user == nil {
//如果是新玩家,创建一条基础的数据,页面会引导进入创角页面
err = this.module.modelUser.User_Create(user)
if err != nil {
log.Errorf("User_CreateUser err %v", err)
return
}
}
//bind user
err = session.Bind(user.Uid, this.service.GetId())
if err != nil {
code = pb.ErrorCode_BindUser
return
}
//set user other info
user.Logintime = time.Now().Unix()
user.Lastloginip = session.GetIP()
user.Createip = session.GetIP()
//缓存user session
err = this.module.modelSession.Change(user.Uid, map[string]interface{}{
"uid": user.Uid,
"sessionId": session.GetSessionId(),
"gatewayServiceId": session.GetGatewayServiceId(),
},
cache.WithExpire(time.Hour*12),
cache.WithDisabledMgoLog())
if err != nil {
code = pb.ErrorCode_DBError
return
}
//缓存user
err = this.module.modelUser.Add(user.Uid, user, cache.WithDisabledMgoLog())
if err != nil {
code = pb.ErrorCode_DBError
return
}
return
}