增加 8圈自动登录
This commit is contained in:
@ -353,3 +353,111 @@ func (s *sUser) GamelifePackUrl(ctx context.Context, in *model.GamelifePackUrlIn
|
||||
Url: url,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *sUser) Quan8Autologin(ctx context.Context, in *model.Quan8AutologinIn) (out *model.Quan8AutologinOut, err error) {
|
||||
b, err := dao.Stores.Ctx(ctx).WherePri(in.StoreId).Exist()
|
||||
if err != nil {
|
||||
return nil, ecode.Fail.Sub("查找门店失败")
|
||||
}
|
||||
if !b {
|
||||
return nil, ecode.Params.Sub("门店 id 错误")
|
||||
}
|
||||
// Fetch default role
|
||||
value, err := dao.Roles.Ctx(ctx).Where(do.Roles{Code: consts.UserRoleCode}).Fields(dao.Roles.Columns().Code, dao.Roles.Columns().Id).One()
|
||||
if err != nil {
|
||||
return nil, ecode.Fail.Sub("查找角色失败")
|
||||
}
|
||||
|
||||
// Check if user exists by Quan8 UUID
|
||||
exist, err := dao.Users.Ctx(ctx).Where(do.Users{Quan8Uuid: in.UUID}).Exist()
|
||||
if err != nil {
|
||||
return nil, ecode.Fail.Sub("查找用户失败")
|
||||
}
|
||||
|
||||
var userId int64
|
||||
if !exist {
|
||||
// User doesn't exist, create new user
|
||||
var username string
|
||||
for {
|
||||
randomStr := grand.Str("abcdefghijklmnopqrstuvwxyz0123456789", 8)
|
||||
username = "qy_" + randomStr
|
||||
count, err := dao.Users.Ctx(ctx).Where(do.Users{Username: username}).Count()
|
||||
if err != nil {
|
||||
return nil, ecode.Fail.Sub("检查用户名失败")
|
||||
}
|
||||
if count == 0 {
|
||||
break // username is unique
|
||||
}
|
||||
}
|
||||
|
||||
password, err := encrypt.EncryptPassword(consts.DefaultPassword)
|
||||
if err != nil {
|
||||
return nil, ecode.Fail.Sub("加密密码失败")
|
||||
}
|
||||
|
||||
user := &entity.Users{
|
||||
Quan8Uuid: in.UUID,
|
||||
Username: username,
|
||||
Nickname: username,
|
||||
PasswordHash: password,
|
||||
Avatar: consts.DefaultUserAvatar,
|
||||
FirstVisitAt: gtime.Now(),
|
||||
LastLoginAt: gtime.Now(),
|
||||
WxPopenId: utility.GenerateUserID("WX"),
|
||||
QqPopenId: utility.GenerateUserID("QQ"),
|
||||
RoleId: value[dao.Roles.Columns().Id].Int64(),
|
||||
LastLoginStoreId: in.StoreId,
|
||||
}
|
||||
|
||||
userId, err = dao.Users.Ctx(ctx).InsertAndGetId(user)
|
||||
if err != nil {
|
||||
return nil, ecode.Fail.Sub("创建用户失败")
|
||||
}
|
||||
} else {
|
||||
value, err := dao.Users.Ctx(ctx).Where(do.Users{Quan8Uuid: in.UUID}).Fields(dao.Users.Columns().Id).Value()
|
||||
if err != nil {
|
||||
return nil, ecode.Fail.Sub("查找用户失败")
|
||||
}
|
||||
userId = value.Int64()
|
||||
|
||||
if _, err := dao.Users.Ctx(ctx).Where(do.Users{Id: userId}).Update(do.Users{LastLoginAt: gtime.Now(), LastLoginStoreId: in.StoreId}); err != nil {
|
||||
return nil, ecode.Fail.Sub("更新登录时间失败")
|
||||
}
|
||||
}
|
||||
// Generate token
|
||||
token, err := jwt.GenerateToken(&jwt.TokenIn{
|
||||
UserId: userId,
|
||||
Role: value[dao.Roles.Columns().Code].String(),
|
||||
})
|
||||
if err != nil {
|
||||
return nil, ecode.Fail.Sub("生成token失败")
|
||||
}
|
||||
return &model.Quan8AutologinOut{
|
||||
Token: token,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *sUser) GenerateSceneId(ctx context.Context, in *model.GenerateSceneIdIn) (out *model.GenerateSceneIdOut, err error) {
|
||||
var sceneId string
|
||||
|
||||
// Check if user exists by UUID if provided
|
||||
if in.UUId != "" {
|
||||
exist, err := dao.Users.Ctx(ctx).Where(do.Users{Quan8Uuid: in.UUId}).Exist()
|
||||
if err != nil {
|
||||
return nil, ecode.Fail.Sub("查找用户失败")
|
||||
}
|
||||
if !exist {
|
||||
return nil, ecode.Params.Sub("用户不存在")
|
||||
}
|
||||
// UUID is provided and user exists, use "is" flag
|
||||
sceneId = fmt.Sprintf("%d_1_%s", in.StoreId, in.UUId)
|
||||
} else {
|
||||
// UUID is empty, use "not" flag with random string
|
||||
randomStr := grand.Str("abcdefghijklmnopqrstuvwxyz0123456789", 8)
|
||||
sceneId = fmt.Sprintf("%d_0_%s", in.StoreId, randomStr)
|
||||
}
|
||||
|
||||
return &model.GenerateSceneIdOut{
|
||||
SceneId: sceneId,
|
||||
}, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user