• vue添加拦截器(身份认证)以及cookie认证


    一、安装vuex和cookies

    npm install vuex --save
    npm install vue-cookies --save

    在全局变量文件中引用

    import Vue from 'vue'
    import Vuex from 'vuex'
    import Cookie from 'vue-cookies'
    
    Vue.use(Vuex);
    
    export default new Vuex.Store({
      state: {
        username:  Cookie.get("username"),
        token:  Cookie.get("token"),
      },
      mutations: {
        saveToken: function (state, userToken) {
          state.username = userToken.username;
          state.token = userToken.token;
          Cookie.set("username", userToken.username, "20min");
          Cookie.set("token", userToken.token, "20min")
        },
        clearToken: function (state) {
          state.username = null;
          state.token = null;
          Cookie.remove("username");
          Cookie.remove("token");
          // this.$router.push({name: "micro"});
        },
      }
    })

    二、在vue文件中将登陆数据存入cookie

    创建出发事件:
    <button @click="toLogin">提交</button>
    
    创建触发的方法
    methods:{
            toLogin(){
              var that = this;
              this.$axios.request({
                url: "http://127.0.0.1:8000/api/v1/auth/",
                method: "POST",
                data: {username: this.username, password: this.password},
                headers: {
                  "Content-Type":"application/json",
                  "k1":"v1",
                }
              }).then(function (arg) {
                if (arg.data.code === 1000){
                  console.log(arg.data);
                  // that.$store.state.token = arg.data.token;
                  // that.$store.state.username = that.username;
             // 第一个参数saveToken为这里调用的全局变量文件中定义的方法,第二个参数为传入的变量 that.$store.commit(
    "saveToken",{"username": that.username,"token":arg.data.token}); }else { console.log(arg.data) } }).catch(function () { console.log("请求失败!") }) } }

    三、首页中如何判断cookie中是否含有用户token

    <div v-if="this.$store.state.token">
          <a>{{this.$store.state.username}}</a>
          <a @click="logout">注销</a>
    </div>
    <div v-else>
          <router-link to="/login">登陆</router-link>
    </div>

    四、在路由文件中添加认证

    index.js文件中
    {
          path: '/micro',
          name: 'micro',
          component: Micro,
          meta:{
            "requireAuth": true,
    }
    
    在main.js中
    router.beforeEach(function (to, from, next) {
      if (to.meta.requireAuth){
        if (store.state.token){
          next()
        }else {
          next({name: "login",query:{backUrl:to.fullPath}})
        }
      } else {
        next()
      }
    
    });

    配置后,如果登陆成功,应该自动进入想要进入的页面,需要在toLogin()方法中加入刷新页面的功能

    var url = that.$route.query.backUrl;
                  // console.log(url)
                  if (url){
                    that.$router.push({path:url})
                  }else {
                    that.$router.push({path:"index"})
                  }

    五、页面加载后,自动向后端提交token

    methods: {
              initMicro(){
                var that = this;
    
                this.$axios.request({
                  url: "http://127.0.0.1:8000/api/v1/micro/",
                  method: "GET",
                  params: {
                    token: this.$store.state.token,
                  }
                }).then(function (ret) {
                  if (ret.data.code === 1000){
                    that.micro_title = ret.data.data
                  }
                })
              }
          }

    后端接收到token后,从数据库查询,如果能够获取结果,则返回正确的值和数据,取出数据后,即可渲染模板。

  • 相关阅读:
    一起谈.NET技术,抛砖引玉:我看微软.NET各子技术领域之应用前景 狼人:
    一起谈.NET技术,Windows Mobile 6.5的开始菜单 狼人:
    一起谈.NET技术,ASP.NET MVC 验证方式(1) 狼人:
    一起谈.NET技术,强烈推荐体验VisualStudio2010 RC 狼人:
    【华安php入门系列】第1天php的执行方式、执行过程
    败者树Java实现
    Android INSTALL_FAILED_ACWF_INCOMPATIBLE
    《构建高质量的C#代码》,新书上市,欢迎交流!
    oracle中的左右连接
    VS2012 UPDATE 2 发布了离线包
  • 原文地址:https://www.cnblogs.com/ttyypjt/p/11013024.html
Copyright © 2020-2023  润新知