简易抖音项目-用户模块
简易抖音项目-用户模块
简易抖音项目-用户模块设计说明
需求分析
用户模块包括用户注册、用户登录和用户信息三个部分。
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; // 用户信息
}
整体架构设计
返回的状态码(虽然客户端并没有逻辑进行处理):
- 注册时用户已经存在,状态码为1
- 用户不存在,状态码为2
- 登录时用户存在但是密码错误,状态码为3
详细设计
用户注册
- DY-api.UserRegister处理请求,将请求中带有的用户名和密码字段传递到服务端DY-srv.UserRegister
- 服务端根据用户名查询数据库,如果发现重名用户名,则直接返回错误
- 未发现重名用户名,则通过md5加盐(用户名)对密码进行加密,加密后插入数据库,数据库返回唯一自增ID
- 服务端返回成功响应给DY-api.UserRegister
- DY-api.UserRegister利用响应中的ID信息,调用jwt进行Token生成,生成后构建客户端相应结构体给客户端
用户登录
- DY-api.UserLogin处理请求,将请求中带有的用户名和密码字段传递到服务端DY-srv.UserLogin
- 服务端根据用户名查询数据库,如果未发现相同用户名,则直接返回错误,否则返回通过用户名查询出来的用户id和密码
- 对用户输入的密码进行md5加盐(用户名)加密,与上一步返回的密码进行比较,如果不匹配直接返回错误
- 密码匹配,则服务端返回成功响应给DY-api.UserLogin
- DY-api.UserLogin利用响应中的ID信息,调用jwt进行Token生成,生成后构建客户端相应结构体给客户端
用户信息
- DY-api.UserInfo处理请求,将请求中带有的id字段传递到服务端DY-srv.UserInfo、DY-srv.GetFollowList和DY-srv.GetFollowerList
- 并行请求三个服务,其中DY-srv.UserInfo根据id字段查询数据库,如果id有效,则返回用户姓名,否则返回错误
- 等待三个服务全部成功返回后,填充响应中的User的五个字段
- id与name字段通过DY-srv.UserInfo的响应直接获取
- followcount通过获取DY-srv.GetFollowList返回的切片长度获取
- followercount通过获取DY-srv.GetFollowerList返回的切片长度获取
- 通过Token获取当前的登录用户id,在DY-srv.GetFollowerList切片内部查询,如果查询到为True,否则为False
- 构建响应结构体并返回给客户端
简易抖音项目-用户模块
https://zhangzhao219.github.io/2023/01/24/ByteDanceYouthTrainCamp/ByteDanceYouthTrainCamp-Project-Users/