简易抖音项目-用户模块

简易抖音项目-用户模块

简易抖音项目-用户模块设计说明

需求分析

用户模块包括用户注册、用户登录和用户信息三个部分。

1. 用户注册接口 /douyin/user/register/

新用户注册时提供用户名,密码,昵称即可,用户名需要保证唯一。创建成功后返回用户 id 和权限token.

接口定义:

service UserRegister {
    rpc UserRegister (douyin_user_register_request) returns (douyin_user_register_response) {}
}

message douyin_user_register_request{
    string username = 1; // 注册用户名,最长32个字符
    string password = 2; // 密码,最长32个字符
}

message douyin_user_register_response{
    int32 status_code = 1; // 状态码,0-成功,其他值-失败
    string status_msg = 2; // 返回状态描述
    int64 user_id = 3; // 用户id
    string token = 4; // 用户鉴权token
}

2. 用户登录接口 /douyin/user/login/

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

接口定义:

service UserLogin {
    rpc UserLogin (douyin_user_login_request) returns (douyin_user_login_response) {}
}

message douyin_user_login_request{
    string username = 1; // 登录用户名
    string password = 2; // 登录密码
}

message douyin_user_login_response{
    int32 status_code = 1; // 状态码,0-成功,其他值-失败
    string status_msg = 2; // 返回状态描述
    int64 user_id = 3; // 用户id
    string token = 4; // 用户鉴权token
}

3. 用户信息接口 /douyin/user/

获取登录用户的 id、昵称,如果实现社交部分的功能,还会返回关注数和粉丝数。

接口定义:

service UserInfo {
    rpc UserInfo (douyin_user_request) returns (douyin_user_response) {}
}

message douyin_user_request{
    int64 user_id = 1; // 用户id
    string token = 2; // 用户鉴权token
}

message douyin_user_response{
    int32 status_code = 1; // 状态码,0-成功,其他值-失败
    string status_msg = 2; // 返回状态描述
    User user = 3; // 用户信息
}

整体架构设计

pSsNise.png

返回的状态码(虽然客户端并没有逻辑进行处理):

  • 注册时用户已经存在,状态码为1
  • 用户不存在,状态码为2
  • 登录时用户存在但是密码错误,状态码为3

详细设计

用户注册

pSsl600.png

  1. DY-api.UserRegister处理请求,将请求中带有的用户名和密码字段传递到服务端DY-srv.UserRegister
  2. 服务端根据用户名查询数据库,如果发现重名用户名,则直接返回错误
  3. 未发现重名用户名,则通过md5加盐(用户名)对密码进行加密,加密后插入数据库,数据库返回唯一自增ID
  4. 服务端返回成功响应给DY-api.UserRegister
  5. DY-api.UserRegister利用响应中的ID信息,调用jwt进行Token生成,生成后构建客户端相应结构体给客户端

用户登录

pSs80pD.png

  1. DY-api.UserLogin处理请求,将请求中带有的用户名和密码字段传递到服务端DY-srv.UserLogin
  2. 服务端根据用户名查询数据库,如果未发现相同用户名,则直接返回错误,否则返回通过用户名查询出来的用户id和密码
  3. 对用户输入的密码进行md5加盐(用户名)加密,与上一步返回的密码进行比较,如果不匹配直接返回错误
  4. 密码匹配,则服务端返回成功响应给DY-api.UserLogin
  5. DY-api.UserLogin利用响应中的ID信息,调用jwt进行Token生成,生成后构建客户端相应结构体给客户端

用户信息

pSst2rQ.png

  1. DY-api.UserInfo处理请求,将请求中带有的id字段传递到服务端DY-srv.UserInfo、DY-srv.GetFollowList和DY-srv.GetFollowerList
  2. 并行请求三个服务,其中DY-srv.UserInfo根据id字段查询数据库,如果id有效,则返回用户姓名,否则返回错误
  3. 等待三个服务全部成功返回后,填充响应中的User的五个字段
    1. id与name字段通过DY-srv.UserInfo的响应直接获取
    2. followcount通过获取DY-srv.GetFollowList返回的切片长度获取
    3. followercount通过获取DY-srv.GetFollowerList返回的切片长度获取
    4. 通过Token获取当前的登录用户id,在DY-srv.GetFollowerList切片内部查询,如果查询到为True,否则为False
  4. 构建响应结构体并返回给客户端

简易抖音项目-用户模块
https://zhangzhao219.github.io/2023/01/24/ByteDanceYouthTrainCamp/ByteDanceYouthTrainCamp-Project-Users/
作者
Zhang Zhao
发布于
2023年1月24日
许可协议