平台登录功能实战
测试平台登录功能
登录功能流程
携带身份信息的方式
登录成功后,业务请求需要携带身份信息
- 携带身份信息的方式
** Cookie
** 请求头
** 请求参数
登录前端设计思路

登录界面
登录路由
- 注册登录页面路由
接口文档
前端定义登录接口
前端配置路由守卫
- 除了登录路由,其余路由都需要先验证是否有 token 信息
- 没有 token 信息时,强制进入登录页面
前端配置请求拦截器
- 登录后所有接口请求自动携带 token 信息
- 登录不成功时,自动清除掉 token 信息
退出登录
- 增加退出登录按钮,点击后清楚 token 信息
密码输入框显示为密文

设计登录接口

后端设计
创建用户表
定义接口

后端鉴权逻辑
- 登录接口
** 前端传入用户名密码
** 查询用户是否存在
** 查询到用户后,对比密码是否一致
** 用户名密码正确,返回登录成功信息和 token
- 注册接口
** 从请求信息中获取 token
** 后端解密 token 做身份校验
** 正确的话,返回对应业务数据
登录接口实现
生成 token
- 方式
** base64:用于二进制数据与可打印 ASCII 字符之间的转换操作
** hashlib:提供了常见的单向加密算法(如MD5,SHA等)
** jwt(JSON Web Tokens):应用在系统的用户认证
- JWT 优势
** 用户登录成功后,服务端通过 jwt 生成一个随机 token 给用户
** 服务端无需保留 token
** 用户再访问时需携带 token
** 服务端接收到 token 之后,通过 jwt 对 token 进行校验是否超时,是否合法
- Flask-JWT-Extended:拓展性更强的 JWT 插件
Flask-JWT-Extended 的使用
使用 JWT 生成 token
- 登录接口
** 验证用户名密码是否正确
** 如果正确返回 token
** 如果错误返回对应错误码
路由鉴权
- 访问的时候需要验证登录信息
- 可以通过 @jwt_required() 装饰器实现
登录与测试用例服务结合
- 使用 MySQL 数据库
- 配置 swagger 信息
- 使用 flask-restx 完成路由注册
- 配置路由保护
跨域
- 跨域请求:同源判断,
- CSRF(Cross-site reuqest forgery),中文名:跨站请求伪造
- 如果两个 URL 的 protocol-协议、port-端口(如果有指定的话)和host-主机都相同的话,则这两个URL是同源
- 安装flask-cors:pip install -U flask-cors