Vue.js 将OAuth令牌从一个Vuejs组件传递到另一个Vuejs组件

Vue.js 将OAuth令牌从一个Vuejs组件传递到另一个Vuejs组件,vue.js,vuex,vue-router,vue-props,Vue.js,Vuex,Vue Router,Vue Props,在SuccessOAuth.vue组件中成功登录OAuth后,我获得OAuth令牌。我获得的令牌详细信息如下: 支票{ const queryString=this.$route.query; console.logqueryString; const token=this.$route.query.accessToken console.logtoken; const secret=this.$route.query.tokenSecret console.logsecret; this.to

在SuccessOAuth.vue组件中成功登录OAuth后,我获得OAuth令牌。我获得的令牌详细信息如下:

支票{ const queryString=this.$route.query; console.logqueryString; const token=this.$route.query.accessToken console.logtoken; const secret=this.$route.query.tokenSecret console.logsecret; this.tokens.token=令牌; this.tokens.secret=秘密; } }, 上山前{ 这是支票; } 现在,我想在另一个组件apiCalls.vue中使用此令牌,在该组件中,我使用此令牌详细信息来调用API方法

... 方法:{ getProductDetails{ console.log=============================================================================================; console.log..获取产品详细信息。。。。; axios .get/auth/getShpDetails{ 参数:{ 令牌:this.tokens.token } } .thenresponse=>{ const productInfo=response.data; console.logProduct info:+productInfo; }; }, }
如何将令牌详细信息从SuccessOAuth组件传递到ApicCalls。我尝试使用props方法,但无法将令牌值获取到脚本标记,无法确定用于传递的其他方法,即使用$emit和使用vuex。请建议解决此问题的最佳方法和正确解决方案。

一种方法是vuex

在根目录中,存储创建一个令牌字段,并生成一个getter,您可以从任何vue组件和任何生命周期挂钩调用它

第二种方法是将令牌设置为localStorage,并在需要时获取/使用它

我更喜欢vuex方法,它可以确保一个单一的真相来源

以下是如何使用vuex商店

首先,根据您正在使用的vue版本安装vuex。通常,对于vue3,建议使用npm ivuex@next

在src文件夹中创建一个Store文件夹,并在其中添加index.js,代码如下

这是目前应用程序的基本存储和状态

让我们首先开始添加操作,因为操作是用于进行API调用和从服务器获取数据的异步代码 下一步,正如您可能猜到的,添加用于更新应用程序状态的变异。。 最后一个getter,用于获取应用程序组件内部计算的数据这是 最后,在所有这些之后,index.js应该是这样的

import { createStore } from "vuex";
import axios from "axios";

const store = createStore({
  state() {
    return {
      token: null,
    };
  },
  actions: {
    async login(context, payload) {
      try {
        const result = await axios({
          method: "POST",
          url: "auth/login",
          data: {
            email: payload.email,
            password: payload.password,
          },
        });

        //If the Request Successed with Status 200
        if (result.status === 200) {
          //A: Extract the Token
          const token = result.data.token;
          //B. Token to LocalStorage Optional if you wish to set it to localstorgae
          localStorage.setItem("token", token);
          //c: UPDATE THE STATE by calling mutation
          context.commit("setToken", {
            token,
          });
        }
      } catch (err) {
        console.log(err);
      }
    },
  },
  mutations: {
    setToken(state, token) {
      state.token = token;
    },
  },
  getters: {
    getToken(state) {
      return state.token;
    },
  },
});

export default store;
注意-这是vuex代码的一般表示形式,根据您的项目要求,有很多其他方法可以实现相同的结果
上述代码不是最终代码,因为它需要根据您的测试/示例/项目要求进行调整

在根目录中,存储创建一个令牌字段,并生成一个getter,您可以从任何vue组件和任何生命周期挂钩调用它

第二种方法是将令牌设置为localStorage,并在需要时获取/使用它

我更喜欢vuex方法,它可以确保一个单一的真相来源

以下是如何使用vuex商店

首先,根据您正在使用的vue版本安装vuex。通常,对于vue3,建议使用npm ivuex@next

在src文件夹中创建一个Store文件夹,并在其中添加index.js,代码如下

这是目前应用程序的基本存储和状态

让我们首先开始添加操作,因为操作是用于进行API调用和从服务器获取数据的异步代码 下一步,正如您可能猜到的,添加用于更新应用程序状态的变异。。 最后一个getter,用于获取应用程序组件内部计算的数据这是 最后,在所有这些之后,index.js应该是这样的

import { createStore } from "vuex";
import axios from "axios";

const store = createStore({
  state() {
    return {
      token: null,
    };
  },
  actions: {
    async login(context, payload) {
      try {
        const result = await axios({
          method: "POST",
          url: "auth/login",
          data: {
            email: payload.email,
            password: payload.password,
          },
        });

        //If the Request Successed with Status 200
        if (result.status === 200) {
          //A: Extract the Token
          const token = result.data.token;
          //B. Token to LocalStorage Optional if you wish to set it to localstorgae
          localStorage.setItem("token", token);
          //c: UPDATE THE STATE by calling mutation
          context.commit("setToken", {
            token,
          });
        }
      } catch (err) {
        console.log(err);
      }
    },
  },
  mutations: {
    setToken(state, token) {
      state.token = token;
    },
  },
  getters: {
    getToken(state) {
      return state.token;
    },
  },
});

export default store;
注意-这是vuex代码的一般表示形式,根据您的项目要求,有很多其他方法可以实现相同的结果
上述代码不是最终代码,因为它需要根据您的测试/示例/项目要求进行调整

您可以将令牌保存在Localstorage或Cookie中。并根据您的需要使用。以下是此示例的示例代码:

const token='token' 导出函数getToken{ 返回localStorage.getItemtoken } 导出函数setTokentokenData{ 返回localStorage.setItemtoken,tokenData } 导出函数removeToken{ 返回localStorage.removitemtoken }
您可以使用Vuex进行状态管理。这是一个

您可以将您的令牌保存在本地存储或cookie中。并根据您的需要使用。以下是此示例的示例代码:

const token='token' 导出函数getToken{ 返回localStorage.getItemtoken } 导出函数setTokentokenData{ 返回l ocalStorage.setItemtoken,tokenData } 导出函数removeToken{ 返回localStorage.removitemtoken }
您可以使用Vuex进行状态管理。下面是@Nishant Sham建议的一个

,我只是修改index.js中的操作方法,如下所示:

从“Vue”导入Vue 从Vuex导入Vuex; Vue.useVuex; 导出默认的新Vuex.Store{ 声明:{ 代币: }, 吸气剂:{ getTokenstate{ 返回state.token; } }, 突变:{ setTokenstate,tokenValue{ state.token=tokenValue; } }, 行动:{ setToken{commit},tokenValue{ commitsetToken,tokenValue; } } }; 在vue组件中,您可以按如下方式调用getter和setter:

//设置令牌值 var令牌=dwe123313e12//分配的随机令牌值 此.$store.commitsetotoken,令牌; ..... //获取令牌值 var getToken=this.$store.getters.getToken;
正如@Nishant Sham所建议的,我只是修改index.js中的操作方法,如下所示:

从“Vue”导入Vue 从Vuex导入Vuex; Vue.useVuex; 导出默认的新Vuex.Store{ 声明:{ 代币: }, 吸气剂:{ getTokenstate{ 返回state.token; } }, 突变:{ setTokenstate,tokenValue{ state.token=tokenValue; } }, 行动:{ setToken{commit},tokenValue{ commitsetToken,tokenValue; } } }; 在vue组件中,您可以按如下方式调用getter和setter:

//设置令牌值 var令牌=dwe123313e12//分配的随机令牌值 此.$store.commitsetotoken,令牌; ..... //获取令牌值 var getToken=this.$store.getters.getToken;
您能否提供Vuex的示例代码,让我了解如何在代码中使用它。无法从Vuex文章中获取您能否提供Vuex的示例代码,以了解我如何在代码中使用它。无法从Vuex文章中获取这确实很有帮助。如何使用vuejs代码中操作中提到的异步登录方法?您可以使用$store.commit'setToken',dwe123313e12',确保操作中有一个commit实例。我将尝试在回答部分简单地补充这一点,这确实很有帮助。如何使用vuejs代码中操作中提到的异步登录方法?您可以使用$store.commit'setToken',dwe123313e12',确保操作中有一个commit实例。将尝试在回答部分简要添加
mutations: {
    setToken(state, token) {
      state.token = token;
    },
  },
  getters: {
    getToken(state) {
      return state.token;
    },
  },
import { createStore } from "vuex";
import axios from "axios";

const store = createStore({
  state() {
    return {
      token: null,
    };
  },
  actions: {
    async login(context, payload) {
      try {
        const result = await axios({
          method: "POST",
          url: "auth/login",
          data: {
            email: payload.email,
            password: payload.password,
          },
        });

        //If the Request Successed with Status 200
        if (result.status === 200) {
          //A: Extract the Token
          const token = result.data.token;
          //B. Token to LocalStorage Optional if you wish to set it to localstorgae
          localStorage.setItem("token", token);
          //c: UPDATE THE STATE by calling mutation
          context.commit("setToken", {
            token,
          });
        }
      } catch (err) {
        console.log(err);
      }
    },
  },
  mutations: {
    setToken(state, token) {
      state.token = token;
    },
  },
  getters: {
    getToken(state) {
      return state.token;
    },
  },
});

export default store;