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);
我在 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);