小魏学编程
新手
新手
  • 最后登录2021-12-05
  • 发帖数4
阅读:4634回复:0

[vue]vue+element-ui后台管理系统的登录及退出

楼主#
更多 发布于:2021-09-28 20:43
1.登录页面的布局(通过element-ui组件实现布局)

使用的控件有:el-form,el-form-item,el-input,el-button

html代码
 
<template>
    <div class="login_container">
        <div class="login_box">
<!--            头像区域-->
            <div class="avatae_box">
                <img src="../assets/a.png" alt="">
            </div>
<!--            登录表单区域-->
            <div>
                <el-form ref="loginFormRef" :model="loginForm" :rules="loginFormRules" label-width="0px" class="login_form">
<!--                    用户名-->
                    <el-form-item prop="username">
                        <el-input v-model="loginForm.username"
                                  prefix-icon="iconfont icon-user"
                                  placeholder="请输入用户名">
                        </el-input>
                    </el-form-item>
<!--                    密码-->
                    <el-form-item prop="password">
                        <el-input v-model="loginForm.password"
                                  prefix-icon="iconfont icon-3702mima"
                                  type="password" placeholder="请输入密码">
                        </el-input>
                    </el-form-item>
<!--                    按钮-->
                    <el-form-item class="btns">
                        <el-button type="primary" @click="login">登录</el-button>
                        <el-button type="info" @click="resetLoginForm">重置</el-button>
                    </el-form-item>
                </el-form>
            </div>
        </div>
    </div>
</template>

2.重置表单内容
当用户名或者密码输入错误时,如果在输入框一个一个删除,影响了使用者的体验,因此添加了表单重置的功能,只需点击重置按钮,就能直接清空表单内容

1.通过ref属性绑定form表单<el-form ref="loginFormRef"><el-form>

2.给重置按钮绑定点击事件<el-button type="info" @click="resetLoginForm">重置</el-button>

3.methods中添加点击事件,通过使用form表单提供的resetFields方法进行表单的重置
resetLoginForm() {
                // console.log(this)
                this.$refs.loginFormRef.resetFields()
            }

3.表单的验证及登录存储token在sessionStorage
form组件提供了表单验证的功能,只需要通过rules属性传入约定的验证规则,并将form-item的prop属性设置为校验字段名,再在Methods中通过validate方法进行验证

        1.首先为form绑定验证规则对象(见上面html代码)<el-form :rules="loginFormRules"></el-form>

        2.在包裹el-input的el-form-item中通过prop设置需要验证的字段名(username,password)

        3.在data中定义rules规则  required表示必填,trigger表示触发验证的条件

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' }
     ]
 }

         4.为登录按钮添加点击事件<el-button type="primary" @click="login">登录</el-button>

         5.在Methods中添加login事件,当用户名及密码表单验证成功后发起axios请求,当请求成功后通过push跳转(home组件)并将token值存入sessionStorage中

          
login(){
      this.$refs.loginFormRef.validate(async valid=&gt;{
      // console.log(valid);
      if (!valid) return;
     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中
             // 1.1 项目中出了登录之外的其他API接口,必须在登录之后才能访问
            // 1.2 token只应在当前网站打开期间生效,所以将token保存在 sessionStorage中
       // console.log(res);
      window.sessionStorage.setItem('token',res.data.token);
      // 2.通过push跳转到主页,路由地址是/home
       this.$router.push('/home')
 })

4.在router/index.js中挂载路由导航守卫
通过获取token判定用户有没有登录,当没有登录时,直接通过url访问特定页面时,需要重新导航到登录页面,如果是登录状态,就放行

router.beforeEach有三个参数:
        to:将要访问的路径
        form:代表从哪个路径跳转而来
        next:表示一个函数,表示放行

//挂载路由导航守卫
//挂载路由导航守卫
router.beforeEach((to,from,next)=&gt;{
  //to:将要访问的路径
  //from:代表从哪个路径跳转而来
  //next:表示一个函数,表示放行
  //  next()  放行   next('/login')  强制跳转
  if(to.path === '/login') return next();
  //获取token
  const tokenStr = window.sessionStorage.getItem('token');
  //判定是否有登录token,有就放行,没有就跳转登录页
  if(!tokenStr) return next('/login');
  next();
})

5. 退出账号基于token的方式实现退出,只需要销毁本地的token即可,再跳转页面至登录页

1.在新组件页面中添加按钮,并为其绑定点击事件

 <el-button type="info" @click="logout">退出</el-button>

2.在methods中添加事件
logout(){
      // 清空token并跳转到登录页
     window.sessionStorage.clear();
      this.$router.push('/login');
 }

持续更新中.........
[小魏学编程于2021-09-29 09:33编辑了帖子]
游客


返回顶部

公众号

公众号