Axios 授权不起作用 - VueJS + Django

Axios Authorization not working - VueJS + Django

我正在尝试使用 VueJS 和 Django 构建应用程序。我也在使用 Graphene-Django 库,因为该项目使用 GraphQL。

现在,身份验证工作正常,我得到了一个 JWT 令牌。 但是当我将令牌用于其他需要身份验证的查询时,我在 Vue 中收到此错误:

"Error decoding signature"

Django 日志也 returns 这个:

graphql.error.located_error.GraphQLLocatedError: Error decoding signature

jwt.exceptions.DecodeError: Not enough segments

ValueError: not enough values to unpack (expected 2, got 1)

奇怪的是,同样的查询在 Postman 中执行时运行正常。

正如我在标题中提到的,我的请求使用 Axios,这是一个请求示例:

axios({
  method: "POST",
  headers: { Authorization: "JWT " + localStorage.getItem("token") },
  data: {
    query: `{
        dailyAppoint (today: "${today}") {
            id
            dateTime
        }
     }`
    }
});

注意:它使用 'JWT' 而不是 'Bearer' 因为不知何故 'Bearer' 对我不起作用。

好吧,有几个问题,你 API 在没有 Vue.js curl 的情况下工作吗?生成令牌,从 curl 检查 API。

如果是,则检查从请求发送的 Headers,来自 Network Inspector,mozilla dev tools/chrome devtools。并用那些 RAW Headers.

更新你的 Post

当您的 public 密钥无法解码由您的私钥签名的字符串 [token] 时,会出现此特定错误。这最终意味着访问令牌已被篡改。这也可能意味着您正在发送 'unkown'-- JS 状态初始化错误之类的值。

检查请求的 RAW headers。会有帮助。

使用请求拦截器设置授权header:

axios.interceptors.request.use(config => {
   if (localStorage.getItem("token") != null)
     config.headers["Authorization"] = "JWT " + localStorage.getItem("token");
   return config;
 });