这是我参与「第五届青训营 」伴学笔记创作活动的第 11 天
本篇是青训营项目阶段性总结的第二篇,主要包含了user模块的实现以及在开发中遇到的一些坑。
实现思路
用户注册接口
- 首先我们需要判断用户注册接口属于的路由类型。假设属于第一类,也就是不进行权限管理(不使用jwt中间件),服务器收到前端的用户名和密码后判断字段是否合法以及用户名是否已经存在,然后将新的用户信息添加到数据库中。这样做看似没有问题,但是实际上是不符合接口定义的。
- 用户登陆接口要求:返回用户id和权限token,如果不使用jwt显然就无法获得token,这时前端的APP在注册完成后是无法自动跳转登陆的,因为前端在注册后没有收到token。
- 解决方法:在注册路由里添加
mw.JwtMiddleware.LoginHandler,将注册请求伪装成登陆请求。这时,注册路由和登陆路由会同时指向Authenticator(),在函数内部我们需要使用c.FullPath()去区分是登陆还是注册,如果是登陆,请求的路径里就会包含login;而如果是注册则会包含register。区分登陆和注册请求之后就可以完成各自的逻辑了。
用户信息接口
用户信息接口的实现相比以上两者简单很多,按照接口的定义,前端会发送tokne,token验证通过以后服务器返回相应的用户信息。显然用户信息接口属于第三类,也就是需要验证登陆状态,因此我们需要在用户信息对应的路由内添加mw.JwtMiddleware.MiddlewareFunc()。最后我们编写UserInfo(),将用户信息直接从context里返回给前端。
未完待续...