FeathersJs 上的 Axios 补丁没有授权令牌

Axios Patch On FeathersJs No auth token

我在 FeathersJS 中遇到补丁问题。

我想用axios.patch

更新数据

但出现的消息始终是无身份验证令牌

{"name":"NotAuthenticated","message":"No auth token","code":401,"className":"not-authenticated","data":{},"errors":{}}

这是我的 axios :

Aktifasi() {
  axios.patch(process.env.ROOT_API+'/ek_user?id_user=2',
  qs.stringify({
    headers: {
      'Authorization': 'Bearer ' + localStorage.getItem('token'),
      'Content-Type': 'application/json',
    },
    active_user: 1
  }))
  .then(request => this.AktifasiSuccesSend(request))
  .catch((error) => this.AktifasiFailedSend(error))
},
AktifasiSuccesSend (request) {
  console.log('Yay');
},
AktifasiFailedSend (error) {
  console.log('Oh Fail');
}

还有这个 FeathersJS 上的钩子:

   before: {
    all: [],
    find: [ authenticate('jwt') ],
    get: [ authenticate('jwt') ],
    create: [ hashPassword() ],
    update: [ hashPassword(),  authenticate('jwt') ],
    patch: [ hashPassword(),  authenticate('jwt') ],    
    remove: [ authenticate('jwt') ]
  },

我建议您熟练使用合适的 Node 调试器。 Visual Studio 代码有一个很棒的调试器。我什至在 Feathers 博客上写了一篇关于它的文章:https://blog.feathersjs.com/debugging-feathers-with-visual-studio-code-406e6adf2882

我会给你一些指导,让你继续前进,但你需要使用调试器来回答你自己的问题。

您收到的 "No auth token" 消息来自 authenticate('jwt') 挂钩。以下是您用来解决自己的问题的一些典型步骤:

  • 如果您在 node_modules 文件夹中打开该挂钩并在消息前放置断点,您将能够看到它在何处寻找 jwt 令牌。
  • 如果你在 patch 钩子中的所有其他钩子之前创建一个钩子,你将能够在其中放置一个断点并检查钩子上下文对象以查看请求是否包含 jwt,或不(在 authenticate 钩子期望的相同位置。
  • 如果 jwt 令牌不在 authenticate 挂钩期望找到它的地方,您可能在 authentication.js 安装文件中缺少中间件函数注册。您将检查 feathers 文档以确保您已正确注册身份验证插件。

Axios configuration documentation 所示,headers 作为单独的选项传递,而不是作为字符串化的查询字符串(根本不需要):

const data = {
  active_user: 1
};
const config = {
  headers: {
    'Authorization': 'Bearer ' + localStorage.getItem('token'),
    'Content-Type': 'application/json',
  }
};

axios.patch(process.env.ROOT_API + '/ek_user?id_user=2', data, config);