service层实现注册逻辑
一、实现用户service层
创建用户service
结构化用户service
package service
import "hello/model"
type UserService struct {
}
// 注册函数
func (s *UserService) Register(mobile, plainpwd, nickname, avatar, sex string) (user model.User, err error) {
return user, nil
}
// 登录函数
func (s *UserService) Login(mobile, plainpwd string) (user model.User, err error) {
return user, nil
}
实现注册逻辑
但是会发现DbEngin不存在,怎么办呢?通常会使用以下方法来实现,service层新建init.go进行初始化
继续实现注册逻辑
密码进行加密,进行封装utils的md5包
package util
import (
"crypto/md5"
"encoding/hex"
"strings"
)
// 密码加密小写
func Md5Encode(data string) string {
h := md5.New()
h.Write([]byte(data)) // 需要加密的字符串为 123456
cipherStr := h.Sum(nil)//求和
//转成16进制的字符串
return hex.EncodeToString(cipherStr)
}
// 密码转大写
func MD5Encode(data string) string {
return strings.ToUpper(Md5Encode(data))
}
// 验证密码
func ValidatePasswd(plainpwd, salt, passwd string) bool {
return Md5Encode(plainpwd+salt) == passwd
}
// 创建加密密码
func MakePasswd(plainpwd, salt string) string {
return Md5Encode(plainpwd + salt)
}
接下来就可以使用md5密码加密的包了,最终实现注册逻辑
package service
import (
"errors"
"fmt"
"hello/model"
"hello/util"
"math/rand"
"time"
)
type UserService struct {
}
// 注册函数
func (s *UserService) Register(mobile, plainpwd, nickname, avatar, sex string) (user model.User, err error) {
//检验手机号是否存在
tmp := model.User{}
_, err = DbEngin.Where("mobile=? ", mobile).Get(&tmp)
if err != nil {
return tmp, err
}
//如果存在则返回提示已经注册
if tmp.Id > 0 {
return tmp, errors.New("该手机号已经存在")
}
//否则拼接插入数据
tmp.Mobile = mobile
tmp.Avatar = avatar
tmp.Nickname = nickname
tmp.Sex = sex
//随便来个随机数
tmp.Salt = fmt.Sprintf("%06d", rand.Int31n(10000))
//passwd =
//md5加密
tmp.Passwd = nickname
tmp.Passwd = util.MakePasswd(plainpwd, tmp.Salt)
//创建时间,用来统计用户的注册量
tmp.Createat = time.Now()
//插入InsertOne
_, err = DbEngin.Insert(&tmp)
//前端恶意插入特殊字符
//数据库连接操作失败
//最后返回新用户信息
return tmp, err
}
// 登录函数
func (s *UserService) Login(mobile, plainpwd string) (user model.User, err error) {
return user, nil
}
到此,注册逻辑实现完了,同学们参考注册代码来实现登录功能