Vue项目练习--电商后台管理系统的功能---登录页面模块

Vue项目练习--电商后台管理系统的功能---登录页面

电商后台管理系统项目预览:

 

用户登录--用户在登录页面输入用户名和密码后调用后台接口进行验证,通过验证之后,根据后台的响应状态跳转到项目主页

这里使用token令牌的方式来维持登录状态,原因如下:

 

  • 因为HTTP协议有无状态的特点
  • 通过 cookie 在客户端记录状态
  • 通过 session 在服务器端记录状态
  • 通过 token 方式维持状态

 

如果前端与后台接口之间不存在跨域问题,那么推荐使用cookie和session来记录登录状态

如果前端与服务器接口之间存在跨域问题,那么就要使用token的方式来维持登录状态

 

1.用户登录页面的布局,这里通过 Element-UI 组件实现布局:

 

 

 

 

 

 

 

 

 

 

 

  • el-form
  • el-form-item
  • el-input
  • el-button
  • 阿里字体图标库

2.给登录表单进行数据绑定

  2.1 给el-form添加:model属性绑定,指向一个数据对象;

  2.2 为每一个表单项通过v-model绑定到数据对象上对应的属性中

 

 

 

 

 

 3.给表单项添加数据验证的行为

  3.1 要为el-form添加:rules属性绑定,指向一个表单验证规则对象

  3.2 给每个el-form-item项指定一个prop属性,值为rules中的一个具体验证规则

 

 

 

 4.实现表单重置功能

  4.1 获取到表单的实例对象,通过实例对象直接访问resetField函数,从而重置整个表单

 

 

如何才能拿到这个表单的实例对象呢给el-form组件添加一个ref的引用,引用名称可以任意取,只要合法就行。

 

 

 

只要获取到LoginFormRef,就能拿到该表单的实例对象。可以直接通过LoginFormRef调用resetField函数来重置表单。

通过this.$refs可以直接获取到表单的引用对象,这个引用对象就是表单组件的实例对象

 

 

 5.实现登录

  • 通过 axios 调用登录验证接口
  • 登录成功之后保持用户 token 信息
  • 跳转到项目主页

注意,发送axios请求时,必须打开MySQL数据库,并且运行后端服务器接口的项目!!!

如果某个方法的返回值是promise对象需要使用.then()的方式来获取返回的结果,则可以使用async/await来简化对promise的操作。

注意,await只能用在被async修饰的方法中,所以需要在紧挨着await的方法修饰为一个异步的async方法。

 

 

 

 

 

6.路由导航守卫控制访问权限

如果用户没有登录,但是直接通过URL访问特定页面,需要重新导航到登录页面。

 

 

// 挂载路由导航守卫
router.beforeEach((to, from, next) => {
  // to 将要访问的路径
  // from 代表从哪个路径跳转而来
  // next 是一个函数,表示放行
  // next()  放行    next('/login')  强制跳转
  if (to.path === '/login') return next()
  const tokenStr = window.sessionStorage.getItem('token')
  if (!tokenStr) return next('/login')
  next() 
})

7.基于 Element-UI 进行表单验证 

点击登录按钮后,通过调用表单的某个函数来进行预验证。

 

 

 

login () {
   // 进行表单验证
    this.$refs.LoginFormRef.validate(async valid => {
    // 如果验证失败,则直接退出后续代码的执行
       if (!valid) return
        // el-form中所填写的数据都会自动同步到loginForm中
        // axios返回的结果中的data属性才是我们真正需要的数据,使用解构赋值的方式将data解构出来
        const { data: res } = await this.$http.post('login', this.loginForm)
        // 返回的结果是一个promise对象,使用async/await后返回的是一个具体的响应对象
        // console.log(res)
        if (res.meta.status !== 200) return this.$message.error('登录失败!')
        this.$message.success('登录成功!')
        // 1. 将登录成功之后的token保存到客户端的sessionStorage中
        // 因为localStorage是持久化的存储机制,而sessionStorage是会话期间的存储机制
        //   1.1 项目中除了登录之外的其他API接口,必须在登录之后才能访问
        //   1.2 token只应在当前网站打开期间生效,所以token保存在sessionStorage中
        window.sessionStorage.setItem('token', res.data.token)
        // 2. 通过编程式导航跳转到后台主页,路由地址是 /home
        this.$router.push('/home')
    })
}

 

// 这是登录表单的验证规则对象
LoginFormRules: {
    // 验证用户名是否合法
    username: [
        { required: true, message: '请输入登录名称', trigger: 'blur' },
        { min: 3, max: 10, message: '长度在 3 到 10 个字符', trigger: 'blur' }
    ],
    // 验证密码是否合法
    password: [
        { required: true, message: '请输入登录密码', trigger: 'blur' },
        { min: 6, max: 15, message: '长度在 6 到 15 个字符', trigger: 'blur' }
    ]
}

8.退出功能实现原理

 

 

 

 

// 清空token
window.sessionStorage.clear()
// 跳转到登录页
this.$router.push('/login')

 

posted @ 2021-10-11 13:19  山下美月  阅读(443)  评论(0编辑  收藏  举报