笔记
1 分解到单步可写
2 按需求路径调代码。
练习(部分叫法不一样,生产中会直接在github 上先找一个,以下仅为个人练手yy)
开始前需求梳理。
做啥
注册 (真实手机号,短信验证)
登录 (单点 先later)
退出
(找回,扫码登录 绑定,受限篇幅,略)
1 建user model ,使用model save 方法。(usermodel 和user rp先融在一起,后期再拆)
1.1 umodel save 方法时支持validate(),支持rules 配置。 (第一个轮子,一定要有)
2 service 提供获取验证码接口
2.1 service 公用函数编写。response (code ,msg ,data = [])
2.2 验手机号,验证后 ,发现是第二次验手机号了,马上重构,正则抽取至公公配置项 ,1.1 同时重构验证(dry 原则是灵魂)
2.3 实现发送验证码(调接口),和session 存验证码。
2.3.1 调接口,走通后转mock dev 模式下,vcode 直接响应出来
2.3.2 存验证码有效期测试,引入redis 用好setex
2.3.3 重构, 请求验频,超频后上策略,先直接拒绝(后端不可能相信前端,这是原则)
3 service 实现注册
3.1 验证码
3.2 调用1 保存数据。
3.2.2 usermodel里面提供的rules 使用. 第一组测试用例来了
4 实现登陆4.1 实现userModel -> auth( $username , $password) 接口。
4.2 生成 token ,并设置token 有效时长。 (这里用redis 实现) 所以会顺带ttl看一下
4.3 有条件下,开始实现单点登录。
(可以先实现个简单的,服务端登录时,存token 内容时,把机器码mcode(标识)也编进去,并在redis 一个 (username: mcode) ),新的登录成功后,更新 (username: mcode)
继续重构,redis 是基于内存型的,容易各种小毛病,换zookeeper . (当然,初期mvp 时,这里直接挂起,后期处理)
5 退出
6 在实现1 之前,向前端提供mock接口,别人前端傻等。
备注: 以上内容仅为yy ,真实项目,会有很大的差别。如作者所说,很多细节,早就在dp 时潜移默化了,没必要罗里吧嗦的全写出来。【凡事都有开销,包括磨刀】
但是在一些决策点上,会不断沟通。(例如,验频策略,是否单点登录,密码强度究竟是如何) 别让产品说了算,特别是公司有不靠谱的产品的时候。 你再怎么大神,也不可能写得比人家拍脑袋还快的。
展开