githubEdit

day06-02.登录模块

基本结构搭建

image.png

实现步骤

  1. Login/index.js 中创建登录页面基本结构

  2. 在 Login 目录中创建 index.scss 文件,指定组件样式

  3. logo.pnglogin.png 拷贝到 https://cdn.jsdelivr.net/npm/itheima-react/assets 目录中

代码实现 pages/Login/index.js

pages/Login/index.scss

表单校验实现

image.png 实现步骤

  1. 为 Form 组件添加 validateTrigger 属性,指定校验触发时机的集合

  2. 为 Form.Item 组件添加 name 属性

  3. 为 Form.Item 组件添加 rules 属性,用来添加表单校验规则对象

代码实现 page/Login/index.js

获取登录表单数据

实现步骤

  1. 为 Form 组件添加 onFinish 属性,该事件会在点击登录按钮时触发

  2. 创建 onFinish 函数,通过函数参数 values 拿到表单值

  3. Form 组件添加 initialValues 属性,来初始化表单值

代码实现 pages/Login/index.js

image.png

封装request工具模块

业务背景: 前端需要和后端拉取接口数据,axios是使用最广的工具插件,针对于项目中的使用,我们需要做一些简单的封装

实现步骤

  1. 安装 axios 到项目

  2. 创建 utils/request.js 文件

  3. 创建 axios 实例,配置 baseURL,请求拦截器,响应拦截器

  4. 在 utils/index.js 中,统一导出request

Axiosarrow-up-right

使用Redux管理token

安装Redux相关工具包

配置Redux

实现登录逻辑

业务逻辑:

  1. 跳转到首页

  2. 提示用户登录成功

token持久化

业务背景: Token数据具有一定的时效时间,通常在几个小时,有效时间内无需重新获取,而基于Redux的存储方式又是基于内存的,刷新就会丢失,为了保持持久化,我们需要单独做处理

封装存取方法

实现持久化逻辑

刷新浏览器,通过Redux调试工具查看token数据 image.png

请求拦截器注入token

业务背景: Token作为用户的数据标识,在接口层面起到了接口权限控制的作用,也就是说后端有很多接口都需要通过查看当前请求头信息中是否含有token数据,来决定是否正常返回数据

token.png

拼接方式:config.headers.Authorization = Bearer ${token}}

utils/request.js

路由鉴权实现

业务背景:封装 AuthRoute 路由鉴权高阶组件,实现未登录拦截,并跳转到登录页面 实现思路:判断本地是否有token,如果有,就返回子组件,否则就重定向到登录Login

实现步骤

  1. 在 components 目录中,创建 AuthRoute/index.jsx 文件

  2. 登录时,直接渲染相应页面组件

  3. 未登录时,重定向到登录页面

  4. 将需要鉴权的页面路由配置,替换为 AuthRoute 组件渲染

代码实现 components/AuthRoute/index.jsx

src/router/index.jsx

Last updated

Was this helpful?