青训营大项目总结(1) | 青训营笔记

217 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 10 天
本篇青训营笔记将青训营项目进行阶段性总结,主要包含了user模块的实现以及在开发中遇到的一些坑。

任务描述

user模块包含了三个接口,分别是用户注册接口、用户登陆接口、用户信息。以下是是接口信息的具体描述。

/douyin/user/register/ - 用户注册接口 POST

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

/douyin/user/login/ - 用户登录接口 POST

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

/douyin/user/ - 用户信息 GET

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

实现思路

为了方便进行统一用户管理,我选择了使用Herze框架中的jwt中间件实现以上接口。

路由绑定

首先我们需要为路由指定访问权限,我将路由分成了3类,分别是无需登陆即可访问,需要登陆才能访问以及请求登陆。对于第一种,我们不需要进行任何操作。第二种,我们需要添加mw.JwtMiddleware.LoginHandler()。第三种,我们需要在路由里添加mw.JwtMiddleware.MiddlewareFunc()表明当前访问需要持有有效的token才能访问回调函数。
显然,用户注册接口属于第一类,用户登陆接口属于第二类,而用户信息接口属于第三类。

用户登陆接口

前端调用用户登陆接口的时候,会发送用户名和密码,我们需要在InitJwt()中配置用户认证函数Authenticator(),对用户名和密码进行校验。在Authenticator()里面我们需要访问user数据库,如果用户名和密码正确则返回用户信息,反之则返回nil和错误信息。
jwt中间件会基于Authenticator()的返回类型判断是否登陆成功,登陆成功后会向该请求发放token(token相关配置我们将在以后的笔记中进行介绍),然后进入LoginResponse()设置响应体。如果登陆不成功则会进入Unauthorized()处理用户认证失败的情况并且设置响应体。
未完待续...