// 登录;成功返回用户登录信息(user_login) func Login(username, passwd string) (*model.UserLogin, error) { userLogin := model.NewUserLogin() err := userLogin.Where("username="******" OR email=" + username).Find() if err != nil { logger.Errorf("用户 %s 登录错误:%s", username, err) return nil, errors.New("内部错误,请稍后再试!") } // 校验用户 if userLogin.Uid == 0 { logger.Infof("用户名 %s 不存在", username) return nil, ErrUsername } passcode := userLogin.GetPasscode() md5Passwd := util.Md5(passwd + passcode) logger.Debugf("passwd: %s, passcode: %s, md5passwd: %s, dbpasswd: %s", passwd, passcode, md5Passwd, userLogin.Passwd) if md5Passwd != userLogin.Passwd { logger.Infof("用户名 %s 填写的密码错误", username) return nil, ErrPasswd } // 登录,活跃度+1 go IncUserWeight("uid="+strconv.Itoa(userLogin.Uid), 1) return userLogin, nil }
// 获取当前登录用户信息(常用信息) func FindCurrentUser(username string) (user map[string]interface{}, err error) { userLogin := model.NewUserLogin() err = userLogin.Where("username="******"获取用户 %s 信息失败:%s", username, err) return } if userLogin.Uid == 0 { logger.Infof("用户 %s 不存在!", username) return } user = map[string]interface{}{ "uid": userLogin.Uid, "username": userLogin.Username, "email": userLogin.Email, } // 获取未读消息数 user["msgnum"] = FindNotReadMsgNum(userLogin.Uid) // 获取角色信息 userRoleList, err := model.NewUserRole().Where("uid=" + strconv.Itoa(userLogin.Uid)).FindAll() if err != nil { logger.Errorf("获取用户 %s 角色 信息失败:%s", username, err) return } for _, userRole := range userRoleList { if userRole.Roleid <= model.AdminMinRoleId { // 是管理员 user["isadmin"] = true } } return }
func CreateUser(form url.Values) (errMsg string, err error) { // 存用户基本信息,产生自增长UID user := model.NewUser() err = util.ConvertAssign(user, form) if err != nil { logger.Errorln("user ConvertAssign error", err) errMsg = err.Error() return } uid, err := user.Insert() if err != nil { errMsg = "内部服务器错误" logger.Errorln(errMsg, ":", err) return } // 存用户登录信息 userLogin := model.NewUserLogin() err = util.ConvertAssign(userLogin, form) if err != nil { errMsg = err.Error() logger.Errorln("CreateUser error:", err) return } userLogin.Uid = uid _, err = userLogin.Insert() if err != nil { errMsg = "内部服务器错误" logger.Errorln(errMsg, ":", err) return } // 存用户角色信息 userRole := model.NewUserRole() // 默认为初级会员 roleId := model.AllRoleId[len(model.AllRoleId)-1] if form.Get("roleid") != "" { tmpId, err := strconv.Atoi(form.Get("roleid")) if err == nil { roleId = tmpId } } userRole.Roleid = roleId userRole.Uid = uid if _, err = userRole.Insert(); err != nil { logger.Errorln("userRole insert Error:", err) } // 存用户活跃信息,初始活跃+2 userActive := model.NewUserActive() userActive.Uid = uid userActive.Username = user.Username userActive.Email = user.Email userActive.Weight = 2 if _, err = userActive.Insert(); err != nil { logger.Errorln("UserActive insert Error:", err) } return }
// 会员总数 func CountUsers() int { total, err := model.NewUserLogin().Count() if err != nil { logger.Errorln("user service CountUsers error:", err) return 0 } return total }
// 记录用户最后登录时间 func RecordLoginTime(username string) error { userLogin := model.NewUserLogin() err := userLogin.Set("login_time=" + time.Now().Format("2006-01-02 15:04:05")).Where("username="******"记录用户 %s 登录时间错误:%s", username, err) } return err }
// 更新用户密码(用户名或email) func UpdatePasswd(username, passwd string) (string, error) { userLogin := model.NewUserLogin() passwd = userLogin.GenMd5Passwd(passwd) err := userLogin.Set("passwd=" + passwd + ",passcode=" + userLogin.GetPasscode()).Where("username="******" OR email=" + username).Update() if err != nil { logger.Errorf("用户 %s 更新密码错误:%s", username, err) return "对不起,内部服务错误!", err } return "", nil }
// 判断指定的邮箱(email)是否存在 func EmailExists(email string) bool { userLogin := model.NewUserLogin() if err := userLogin.Where("email=" + email).Find("uid"); err != nil { logger.Errorln("service EmailExists error:", err) return false } if userLogin.Uid != 0 { return true } return false }
// 判断指定的用户名是否存在 func UsernameExists(username string) bool { userLogin := model.NewUserLogin() if err := userLogin.Where("username="******"uid"); err != nil { logger.Errorln("service UsernameExists error:", err) return false } if userLogin.Uid != 0 { return true } return false }
// 获取 loginTime 之前没有登录的用户 func FindNotLoginUsers(loginTime string) (userList []*model.UserLogin, err error) { userLogin := model.NewUserLogin() userList, err = userLogin.Where("login_time<" + loginTime).FindAll() return }
func CreateUser(form url.Values) (errMsg string, err error) { if EmailExists(form.Get("email")) { err = errors.New("该邮箱已注册过") return } if UsernameExists(form.Get("username")) { err = errors.New("用户名已存在") return } // 存用户基本信息,产生自增长UID user := model.NewUser() err = util.ConvertAssign(user, form) if err != nil { logger.Errorln("user ConvertAssign error", err) errMsg = err.Error() return } user.Ctime = util.TimeNow() // 随机给一个默认头像 user.Avatar = DefaultAvatars[rand.Intn(len(DefaultAvatars))] uid, err := user.Insert() if err != nil { errMsg = "内部服务器错误" logger.Errorln(errMsg, ":", err) return } // 存用户登录信息 userLogin := model.NewUserLogin() err = util.ConvertAssign(userLogin, form) if err != nil { errMsg = err.Error() logger.Errorln("CreateUser error:", err) return } userLogin.Uid = uid _, err = userLogin.Insert() if err != nil { errMsg = "内部服务器错误" logger.Errorln(errMsg, ":", err) return } // 存用户角色信息 userRole := model.NewUserRole() // 默认为初级会员 userRole.Roleid = Roles[len(Roles)-1].Roleid userRole.Uid = uid if _, err = userRole.Insert(); err != nil { logger.Errorln("userRole insert Error:", err) } // 存用户活跃信息,初始活跃+2 userActive := model.NewUserActive() userActive.Uid = uid userActive.Username = user.Username userActive.Avatar = user.Avatar userActive.Email = user.Email userActive.Weight = 2 if _, err = userActive.Insert(); err != nil { logger.Errorln("UserActive insert Error:", err) } return }