抖音大项目注册登录模块介绍| 青训营笔记

184 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 11 天

用户注册
需求

用户需要在注册时提供用户名与密码,并且用户名需要保证唯一。创建成功后需要返回用户 id 和权限token

  • 基本流程
    1. 用户首先输入用户名与密码,点击注册按钮后,前端将用户注册http请求发送到后端。
    2. 后端接收请求,检验用户名与密码是否合法。当用户名或者密码中存在不合法的内容,将返回用户名或密码不合法的提示信息至前端。
    3. 若检验合法,则在数据库中查询该用户名是否已经存在。若存在,则返回该用户已存在的提示信息至前端。
    4. 若用户名未存在,将用户密码加密后,与用户名一并存入数据库中,并生成用户ID。
    5. 未当前注册生成用户信息 token,并进入已登录的状态。
    6. 返回包含用户 ID 和 token的成功响应信息至前端。
    7. 前端接收响应信息,并进入个人页面。

image.png

核心代码

func (s *CreateUserService) CreateUser(req *douyinuser.CreateUserRequest) error {
   user, err := db.QueryUser(s.ctx, req.Username)
   if err != nil {
      return err
   }
   if len(user) != 0 {
      return errno.UserAlreadyExistErr
   }

   h := md5.New()
   if _, err = io.WriteString(h, req.Password); err != nil {
      return err
   }
   password := fmt.Sprintf("%x", h.Sum(nil))

   return db.CreateUser(s.ctx, []*db.User{{
      Username: req.Username,
      Password: password,
   }})
}
亮点设计

使用md5算法加密用户密码,将加密后的密码存储在数据库中,避免密码在数据库中明文存储。

用户登录
需求

用户通过用户名和密码进行登录,登录成功后返回用户 id 和权限 token。

  • 基本流程
    1. 用户首先输入用户名与密码,点击登录按钮后,前端将用户登录http请求发送到后端。
    2. 后端接收请求,检验用户名与密码是否合法。当用户名或者密码中存在不合法的内容,将返回用户名或密码不合法的提示信息至前端。
    3. 若检验合法,则在数据库中查询该用户名是否已经存在。若不存在,则返回该用户不存在的提示信息至前端。
    4. 若用户名存在,将生成用户信息 token,并进入已登录的状态。
    5. 返回包含用户 ID 和 token的成功响应信息至前端。
    6. 前端接收响应信息,并进入个人页面。

image.png

func (s *CheckUserService) CheckUser(req *douyinuser.CheckUserRequest) (int64, error) {
   h := md5.New()
   if _, err := io.WriteString(h, req.Password); err != nil {
      return 0, err
   }
   passWord := fmt.Sprintf("%x", h.Sum(nil))

   userName := req.Username
   users, err := db.QueryUser(s.ctx, userName)
   if err != nil {
      return 0, err
   }
   if len(users) == 0 {
      return 0, errno.AuthorizationFailedErr
   }
   u := users[0]
   if u.Password != passWord {
      return 0, errno.AuthorizationFailedErr
   }
   return int64(u.ID), nil
}
```
```