当前位置: 首页 > 知识库问答 >
问题:

Vue Cookies. get('令牌')返回空

郑安晏
2023-03-14

我的项目使用vuex、axios、vue cookies和JWTs。我有一个叫做api的文件。js导入到我的主vue js、api中。下面是js代码;

import axios from 'axios'
import Vue from 'vue'
import { store } from "@/store";

export default axios.create({
    baseURL: store.state.endpoints.baseUrl,
    headers: {
        Authorization: `JWT ${Vue.$cookies.get('token')}`,
        'Accept': 'application/json',
        'Content-Type': 'application/json'
    }
})

当我通过登录页面登录时,一切都显示成功。在检查器中,cookie“令牌”值正确地用新令牌更新,Vuex更新以显示用户已认证,路由器将我重定向到主页。一旦在主页上,如果我试图导航到一个进行任何需要身份验证的调用的页面,在标题中它会传递“JWT空”而不是cookie中的令牌,并且失败,我最终会进入一个成功登录的永久循环,但是不能去任何地方。

如果我在做任何其他事情之前登录并刷新页面,那么一切都会按预期工作,JWT不再为空。看来,该api。这个问题顶部的js代码没有在每次调用cookie时正确地从cookie中提取令牌,而只是在页面刷新时,这是缓存的还是我需要在登录后以某种方式重新加载此导入?

作为参考,我的登录页面中的代码片段显示了登录后数据是如何更新的;

  api.post(this.$store.state.endpoints.obtainJWT, payload)
      .then((response) => {
        console.log("Token - "+response.data.token);
        console.log("Profile - "+response.data.user);
        this.$cookies.set('token', response.data.token);
        this.$store.commit("setAuthUser",
            {authUser: response.data, isAuthenticated: true})
      })
      .then(() => this.$router.push({path: '/'}))
      .catch((error) => {
        console.log("Error!");
        console.log(error);
        console.debug(error);
        console.dir(error);
      })

以及一个api调用的示例,如果在刷新页面之前访问,则该调用包含JWT null;

import api from "../api.js";
...
api.get("/data_full/" + id)
  .then((response) => {
    this.title = response.data.title;
  })

在我main.js项目中,api.js导入;

...
import api from './api.js'
...
Vue.$http = api;

共有1个答案

宓毅庵
2023-03-14

在发布后阅读我的问题时,我意识到问题不是get(‘token’)调用,而是我正在创建一个Axios实例,在将令牌保存到cookie后,该实例显然没有被重新创建。

我现在已经将与授权头相关的代码移出api。js和进入主界面。js作为拦截器。这样,每次进行Axios调用时都会提取cookie中的令牌值。这解决了我的问题。更新了main中的代码。下面是js;

    ...
    api.interceptors.response.use(
        config => {
            const token = Vue.$cookies.get('token');
            if ( token != null ) {
                config.headers.Authorization = `JWT ${token}`;
            }
            return config
        },
    ...
 类似资料:
  • 发生重定向时,google将重定向到我们的url https://myurl.com/callback?code=somecode 第三步: 反应回来了: HTTP 400错误请求 有人能帮我解决这个问题吗?谢谢!

  • 我试图生成一个access_token和refresh_token访问谷歌电子表格API。我使用了APIhttps://www.googleapis.com/oauth2/v3/token?code=

  • 我有一个计划的WebJob,每天运行,检查数据库中所有用户的密码过期日期。如果密码到期日是今天,它将生成密码重置令牌并通过电子邮件发送给用户。然后用户单击电子邮件中的url,并被带到一个网站,在那里输入新密码。 我设法在我的WebWork中生成一个令牌,并通过电子邮件发送。但是,通过我的Asp重置密码时。NET网站我得到无效令牌。我不明白为什么。我假设它一定与我的WebWork中的令牌提供商有关。

  • 我在自己的Web API上使用Oauth2,在Web应用程序上使用ASP.NET C#来使用该API。在我的web应用程序上,我正在进行HttpWebRequests。当我的访问令牌过期时,我调用一个方法“refreshToken”,该方法发出请求以获取新的访问令牌。这工作很好,没有问题...除了我得到的响应包含一个新的刷新令牌???我在等新的访问令牌。我甚至认为在没有再次传递凭据的情况下这是不可

  • 对于本地帐户,strapi成功验证本地jwt。但是,当我使用Google provider登录时,/connect/Google/callback会重定向到带有access\u令牌、raw[access\u令牌)、raw[id\u令牌等的主页。。。我已经尝试了所有这些令牌,strapi返回所有无效的令牌。 此外,我在用户(内容类型)中没有看到我与google登录的帐户。 我错过什么了吗?

  • 两天前,我们的贝宝整合出了问题。不幸的是,尝试联系贝宝支持已经证明没有帮助(没有回复在2天),所以我会尝试我的运气,在这里。 谢谢!