service层实现注册逻辑

一、实现用户service层

创建用户service 14、service层实现注册逻辑 - 图1

结构化用户service

  1. package service
  2. import "hello/model"
  3. type UserService struct {
  4. }
  5. // 注册函数
  6. func (s *UserService) Register(mobile, plainpwd, nickname, avatar, sex string) (user model.User, err error) {
  7. return user, nil
  8. }
  9. // 登录函数
  10. func (s *UserService) Login(mobile, plainpwd string) (user model.User, err error) {
  11. return user, nil
  12. }

实现注册逻辑 14、service层实现注册逻辑 - 图2

但是会发现DbEngin不存在,怎么办呢?通常会使用以下方法来实现,service层新建init.go进行初始化

14、service层实现注册逻辑 - 图3

继续实现注册逻辑 14、service层实现注册逻辑 - 图4

密码进行加密,进行封装utils的md5包 14、service层实现注册逻辑 - 图5

  1. package util
  2. import (
  3. "crypto/md5"
  4. "encoding/hex"
  5. "strings"
  6. )
  7. // 密码加密小写
  8. func Md5Encode(data string) string {
  9. h := md5.New()
  10. h.Write([]byte(data)) // 需要加密的字符串为 123456
  11. cipherStr := h.Sum(nil)//求和
  12. //转成16进制的字符串
  13. return hex.EncodeToString(cipherStr)
  14. }
  15. // 密码转大写
  16. func MD5Encode(data string) string {
  17. return strings.ToUpper(Md5Encode(data))
  18. }
  19. // 验证密码
  20. func ValidatePasswd(plainpwd, salt, passwd string) bool {
  21. return Md5Encode(plainpwd+salt) == passwd
  22. }
  23. // 创建加密密码
  24. func MakePasswd(plainpwd, salt string) string {
  25. return Md5Encode(plainpwd + salt)
  26. }

接下来就可以使用md5密码加密的包了,最终实现注册逻辑

  1. package service
  2. import (
  3. "errors"
  4. "fmt"
  5. "hello/model"
  6. "hello/util"
  7. "math/rand"
  8. "time"
  9. )
  10. type UserService struct {
  11. }
  12. // 注册函数
  13. func (s *UserService) Register(mobile, plainpwd, nickname, avatar, sex string) (user model.User, err error) {
  14. //检验手机号是否存在
  15. tmp := model.User{}
  16. _, err = DbEngin.Where("mobile=? ", mobile).Get(&tmp)
  17. if err != nil {
  18. return tmp, err
  19. }
  20. //如果存在则返回提示已经注册
  21. if tmp.Id > 0 {
  22. return tmp, errors.New("该手机号已经存在")
  23. }
  24. //否则拼接插入数据
  25. tmp.Mobile = mobile
  26. tmp.Avatar = avatar
  27. tmp.Nickname = nickname
  28. tmp.Sex = sex
  29. //随便来个随机数
  30. tmp.Salt = fmt.Sprintf("%06d", rand.Int31n(10000))
  31. //passwd =
  32. //md5加密
  33. tmp.Passwd = nickname
  34. tmp.Passwd = util.MakePasswd(plainpwd, tmp.Salt)
  35. //创建时间,用来统计用户的注册量
  36. tmp.Createat = time.Now()
  37. //插入InsertOne
  38. _, err = DbEngin.Insert(&tmp)
  39. //前端恶意插入特殊字符
  40. //数据库连接操作失败
  41. //最后返回新用户信息
  42. return tmp, err
  43. }
  44. // 登录函数
  45. func (s *UserService) Login(mobile, plainpwd string) (user model.User, err error) {
  46. return user, nil
  47. }

到此,注册逻辑实现完了,同学们参考注册代码来实现登录功能