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

Vue Axios-令牌未定义

颛孙钱青
2023-03-14

我有一个Vue SPA,我使用Axios处理请求,Vue Axios应用它,vuex存储令牌。但当我发送一个请求时,头授权将变成Bearer未定义或Bearer null。

流程是,通过登录,我检索一个令牌,将其保存到会话存储中,分派一个登录操作,我的vuex存储将从会话存储中设置一个处于状态的令牌。在我登录并将路由器重定向到“/”后,我想向/foo发送GET请求以及我的令牌。但这里我的代币没有定义。根据控制台日志,我知道会话存储在发送请求之前确实有令牌。

我下面的结构从这个教程由Paweljw:

Axios/Axios。js

import axios from 'axios'

export default axios.create({
  baseURL: 'http://example.com/api/,
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer ' + sessionStorage.token
  }
})

Axios/索引。js

import Vue from 'vue';
import VueAxios from 'vue-axios';
import axios from './axios'

Vue.use(VueAxios, axios);

export default Vue;

组件/登录。vue

onLogin(res) {
  if (!res.data.token) {
    return this.onLoginFailed();
  }

  sessionStorage.token = res.data.token;

  this.$store.dispatch("login");
  this.$router.replace(this.$route.query.redirect || "/");

组件/foo。vue

...
this.$http
    .get("foo")
    .then(res => this.doSomething(res))
    .catch(() => this.doSomethingElse());

如前所述,它发送一个未定义承载的请求。我知道当axios。创建(…)正在导出会话存储。令牌为空-应用程序启动时尚未设置。这可能就是原因,但我不明白我应该如何设置它,以及其他使用相同教程的人如何没有这个问题。

非常感谢您的建议。

共有1个答案

齐飞星
2023-03-14

我怀疑本教程可能有错误-如果您在axios中设置标题。创建然后授权标题将获取会话存储的当前值,此时该值为未定义

实际上,您需要在axios中设置标题。拦截器。要求使用-以便在执行AJAX请求时,使用sessionStorage的值填充标头。像这样的

Vue.prototype.$axios = axios.create(
  {
    headers:
      {
        'Content-Type': 'application/json'
      },
    baseURL: process.env.API_URL
  }
);

Vue.prototype.$axios.interceptors.request.use(
  config =>
  {
    if (store.getters.isUserLoggedin) config.headers['Authorization'] = 'Bearer ' + store.getters.user.token;
    return config;
  }
);

Vue.prototype.$axios.interceptors.response.use(
  response => response,
  error =>
  {
    if (error && error.response && error.response.status && error.response.status === 403)
    {
      store.dispatch('unsetUser');
      router.push('/login');
      return Promise.resolve(); // Avoid showing any errors
    }
    else
    {
      logger.error({
        message: 'Error in HTTP request',
        response: JSON.stringify(extractError(error)),
        status: _get(error, 'response.status', 'unknown'),
        url: _get(error, 'config.url', 'unknown'),
        userId: store.getters.userInfo.id
      });
      throw error;
    }
  }
);
 类似资料:
  • 我试图建立一个类,它可以环绕。NET Google API,这样我就可以使用我以前获得的访问令牌来访问用户的Google驱动器。到目前为止,我只是试图让它工作,这样我就不需要刷新令牌(稍后会有更多)。最终目标是让某人通过我设置的web页面进行身份验证,通过直接调用Google Rest API(我将其存储在数据库中)获得访问令牌和刷新令牌。然后,他们可以请求将文件上载/下载到另一个页面上的驱动器上

  • 我想在一个中央Antlr文件中定义公共令牌常量。这样,我就可以定义几个不同的lexer和parser,并在运行时混合和匹配它们。如果它们都共享一组共同的令牌定义,那么它们就可以正常工作。 换句话说,我想看到公共静态final int WORD=2 ,所以他们都同意“2”是一个单词。 我创建了一个名为CommonTokenDefs的文件。g4并添加了如下部分: 并包括 在我的每一个人身上。g4文件。

  • 我在Laravel 5.8中为用户登录和注册编写了一个API。 我在Laravel 5.8中使用JWTAuth。当我在Postman上测试登录时,它生成了一个错误,未定义的变量:token。我试着为register编写API,当我测试它时,它工作得很好。根据我在网上看到的内容,我尝试向内核添加\ Illumbite \ View \ Middleware \ ShareErrorsFromSess

  • 使用axios,我尝试为所有请求设置默认标头身份验证令牌。但默认情况下它没有被发现,并且对于任何其他api调用,“授权”没有在标头中设置。 这是一个常用文件 登录后,我像这样设置标题 但是当我调用任何其他API标头进行授权时,CountryApi.js所在的位置没有设置 Country.js是这个

  • 我用的是角度和节点。js与Auth0一起登录。我正在使用《快速入门指南》启动API。这是我使用Auth0 API的后端。 使用Auth0通用登录登录后,我会尝试访问我的后端,查看我是否获得授权。 这是检查我是否被授权的代码。 注意,我没有传递任何东西(我想我需要传递,但Auth0指南没有告诉我)。 在检查我是否被授权后,我得到一个错误,没有找到授权令牌。不知道我在这里干什么。我的后端是否未正确连接

  • 访问令牌类型可以用以下两种方法之一来定义:在访问令牌类型注册表中注册(按11.1节中的过程)的,或者通过使用一个唯一的绝对URI作为它的名字。 采用URI命名的类型应该限定于特定供应商的实现,它们不是普遍适用的并且特定于使用它们的资源服务器的实现细节。 所有其他类型都必须注册。类型名称必需符合type-name ANBF。如果类型定义包含了一种新的HTTP身份验证方案,该类型名称应该与该HTTP身