zoukankan      html  css  js  c++  java
  • Vue实现登录

    <script>
    export default {
      data () {
        return {
          loginForm: {
            username: 'admin',
            password: '123456'
          },
          // 表单验证
          loginFormRules: {
            username: [
              { required: true, message: '请输入用户名', trigger: 'blur' },
              { min: 2, max: 10, message: '长度在 2 到 10 个字符', trigger: 'blur' }
            ],
            password: [
              { required: true, message: '请输入用户密码', trigger: 'blur' },
              { min: 6, max: 18, message: '长度在 6 到 18 个字符', trigger: 'blur' }
            ]
          }
        }
      },
      methods: {
        // 表单重置按钮
        resetLoginForm () {
          // console.log(this)
          // resetFields:element-ui提供的表单方法
          this.$refs.loginFormRef.resetFields()
        },
        login () {
          // 表单预验证
          // valid:bool类型
          this.$refs.loginFormRef.validate(async valid => {
            // console.log(valid)
            if (!valid) return false
            // this.$http.post('login', this.loginForm): 返回值为promise
            // 返回值为promise,可加await简化操作 相应的也要加async
            const { data: res } = await this.$http.post('login', this.loginForm)  //结构复制
            // console.log(res)
            if (res.meta.status !== 200) return this.$message.error('登录失败')
            this.$message.success('登录成功')
            // 1、将登陆成功之后的token, 保存到客户端的sessionStorage中; localStorage中是持久化的保存
            //   1.1 项目中出现了登录之外的其他API接口,必须在登陆之后才能访问
            //   1.2 token 只应在当前网站打开期间生效,所以将token保存在sessionStorage中
            window.sessionStorage.setItem('token', res.data.token)
            
            // 2、通过编程式导航跳转到后台主页, 路由地址为:/home
            this.$router.push('/home')
          })
        }
      }
    }
    </script>
    

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

    // 挂载路由导航守卫,to表示将要访问的路径,from表示从哪里来,next是下一个要做的操作 next('/login')强制跳转login
    router.beforeEach((to, from, next) => {
      // 访问登录页,放行
      if (to.path === '/login') return next()
      // 获取token
      const tokenStr = window.sessionStorage.getItem('token')
      // 没有token, 强制跳转到登录页
      if (!tokenStr) return next('/login')
      next()
    })
    

      在request拦截请求:

    // 在request 拦截器中, 展示进度条 NProgress.start()
    // 请求在到达服务器之前,先会调用use中的这个回调函数来添加请求头信息
    axios.interceptors.request.use(config => {
      NProgress.start()
      // console.log(config)
      // 为请求头对象,添加token验证的Authorization字段
      config.headers.Authorization = window.sessionStorage.getItem('token')
      // 在最后必须 return config
      return config
    })
    

      

  • 相关阅读:
    异步、作用域、闭包--setTimeout在for循环中的思考
    C++中*和&的定义和使用
    利用border设置transparent绘制图形
    暑假周记四
    暑假周记三
    win10系统下安装Linux虚拟机以及在虚拟机上安装Ubuntu
    暑假周记二
    暑假周记一
    《浪潮之巅》上——阅读笔记06
    《浪潮之巅》上——阅读笔记05
  • 原文地址:https://www.cnblogs.com/sunliyuan/p/12833324.html
Copyright © 2011-2022 走看看